求助 我有个vb小程序不知道哪里错了!

wangfei66 2009-07-05 03:53:23
我是初学者
程序的作用,两个数比较,如果两个数相同,就在指定的位置显示这个数,并且显示这个数的前面和后面的数!

问题是 goto 语句总是跳出for 循环,且结果也不对!如果把Line1: 放到for..next 外 就不能循环了! 如何解决!

Private Sub Command1_Click()
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)
b = 0
For a = 1 To 8
If snow(a) = bijiao(1) Then
GoTo Line1
ElseIf snow(a) = bijiao(2) Then
GoTo Line1
ElseIf snow(a) = bijiao(3) Then
GoTo Line1
ElseIf snow(a) = bijiao(4) Then
GoTo Line1
Else
End If

Line1:
b = b + 1
If b = 1 Then
nexta1.text = snow(a - 1)
nextb1.text = snow(a)
nwxtc1.text = snow(a + 1)
ElseIf b = 2 Then
nexta2.text = snow(a - 1)
nextb2.text = snow(a)
nwxtc2.text = snow(a + 1)
ElseIf b = 3 Then
nexta3.text = snow(a - 1)
nextb3.text = snow(a)
nwxtc3.text = snow(a + 1)
ElseIf b = 4 Then
nexta4.text = snow(a - 1)
nextb4.text = snow(a)
nwxtc4.text = snow(a + 1)

End If
Next a
End Sub
...全文
18 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
simon__sun 2009-07-07
  • 打赏
  • 举报
回复
改成下面的:
Private Sub Command1_Click()
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)
b = 0
For a = 1 To 8
If snow(a) = bijiao(1) Then
GoTo Line1
ElseIf snow(a) = bijiao(2) Then
GoTo Line1
ElseIf snow(a) = bijiao(3) Then
GoTo Line1
ElseIf snow(a) = bijiao(4) Then
GoTo Line1
Else
goto line2 End If

Line1:
b = b + 1
If b = 1 Then
nexta1.text = snow(a - 1)
nextb1.text = snow(a)
nwxtc1.text = snow(a + 1)
ElseIf b = 2 Then
nexta2.text = snow(a - 1)
nextb2.text = snow(a)
nwxtc2.text = snow(a + 1)
ElseIf b = 3 Then
nexta3.text = snow(a - 1)
nextb3.text = snow(a)
nwxtc3.text = snow(a + 1)
ElseIf b = 4 Then
nexta4.text = snow(a - 1)
nextb4.text = snow(a)
nwxtc4.text = snow(a + 1)

End If
line2:
Next a
End Sub
simon__sun 2009-07-07
  • 打赏
  • 举报
回复
改成下面的试试
Private Sub Command1_Click() 
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)
b = 0
For a = 1 To 8
If snow(a) = bijiao(1) Then
GoTo Line1
ElseIf snow(a) = bijiao(2) Then
GoTo Line1
ElseIf snow(a) = bijiao(3) Then
GoTo Line1
ElseIf snow(a) = bijiao(4) Then
GoTo Line1
Else
goto line2 End If

Line1:
b = b + 1
If b = 1 Then
nexta1.text = snow(a - 1)
nextb1.text = snow(a)
nwxtc1.text = snow(a + 1)
ElseIf b = 2 Then
nexta2.text = snow(a - 1)
nextb2.text = snow(a)
nwxtc2.text = snow(a + 1)
ElseIf b = 3 Then
nexta3.text = snow(a - 1)
nextb3.text = snow(a)
nwxtc3.text = snow(a + 1)
ElseIf b = 4 Then
nexta4.text = snow(a - 1)
nextb4.text = snow(a)
nwxtc4.text = snow(a + 1)

End If
line2:
Next a
End Sub


kmzs 2009-07-07
  • 打赏
  • 举报
回复
如果放在For外面,得改为For a=a to 8
贝隆 2009-07-05
  • 打赏
  • 举报
回复
看了楼主的代码,我觉得你还是把GoTo语句去除吧,这样可读性好很多
还有增加一个错误捕获语句,你说老是跳出For循环,可能是产生了什么错误,导致跳出。增加一个错误
捕获语句,再单步调试看看
贴出修改后的代码如下:
Private Sub Command1_Click()
On Error GoTo errSub
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)
b = 0
For a = 1 To 8
If snow(a) = bijiao(1) Or snow(a) = bijiao(2) Or snow(a) = bijiao(3) Or snow(a) = bijiao(4) Then
b = b + 1
If b = 1 Then
nexta1.Text = snow(a - 1)
nextb1.Text = snow(a)
nwxtc1.Text = snow(a + 1)
ElseIf b = 2 Then
nexta2.Text = snow(a - 1)
nextb2.Text = snow(a)
nwxtc2.Text = snow(a + 1)
ElseIf b = 3 Then
nexta3.Text = snow(a - 1)
nextb3.Text = snow(a)
nwxtc3.Text = snow(a + 1)
ElseIf b = 4 Then
nexta4.Text = snow(a - 1)
nextb4.Text = snow(a)
nwxtc4.Text = snow(a + 1)
End If
End If
Next a
Exit Sub
errSub:
Debug.Print Err.Description
End Sub
-晴天 2009-07-05
  • 打赏
  • 举报
回复
除了错误处理,恐怕没有程序员还用goto.
如果goto有问题,你把goto下面的那些语句放到 goto 那儿不就成了.
cqq_chen 2009-07-05
  • 打赏
  • 举报
回复
这个程度思路有点问题,可以再看看msdn,关于字符串比较有很多方法可以实现的。
cqq_chen 2009-07-05
  • 打赏
  • 举报
回复
goto ,不到没有办法就不要用这个功能!
mhm0517 2009-07-05
  • 打赏
  • 举报
回复

'看一下我的代码是否是你要的功能.
Dim Snow(1 To 8) As Long
Dim BiJiao(1 To 4) As Long

Private Sub CommandButton1_Click()

Dim i As Long
Dim j As Long

Dim b As Long

Snow(1) = CLng(Mid(Text1.Text, 1, 2))

For i = 2 To 8
Snow(i) = CLng(Mid(Text1.Text, i * 3 - 3, 3))
Next


BiJiao(1) = CLng(Mid(Text2.Text, 1, 2))

For i = 2 To 4
BiJiao(i) = CLng(Mid(Text2.Text, i * 3 - 3, 3))
Next


For i = 1 To 8
For j = 1 To 4
If Snow(i) = Snow(j) Then
b = b + 1
Select Case b
Case 1
If i > 1 Then nexta1.Text = Snow(i - 1)
nextb1.Text = Snow(i)
If i < 8 Then nwxtc1.Text = Snow(i + 1)
Case 2
If i > 1 Then nexta2.Text = Snow(i - 1)
nextb2.Text = Snow(i)
If i < 8 Then nwxtc2.Text = Snow(i + 1)
Case 3
If i > 1 Then nexta3.Text = Snow(i - 1)
nextb3.Text = Snow(i)
If i < 8 Then nwxtc3.Text = Snow(i + 1)
Case 4
If i > 1 Then nexta4.Text = Snow(i - 1)
nextb4.Text = Snow(i)
If i < 8 Then nwxtc4.Text = Snow(i + 1)
End Select
End If
Next
Next
End Sub


xiaoohoo 2009-07-05
  • 打赏
  • 举报
回复
你的代码这样试试:
Private Sub Command1_Click()
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)

b = 0
a = 0

Line0:

a = a + 1

If snow(a) = bijiao(1) Then
GoTo Line1
ElseIf snow(a) = bijiao(2) Then
GoTo Line1
ElseIf snow(a) = bijiao(3) Then
GoTo Line1
ElseIf snow(a) = bijiao(4) Then
GoTo Line1
Else
End If

Exit Sub

Line1:
b = b + 1

If b = 1 Then
nexta1.Text = snow(a - 1)

nextb1.Text = snow(a)

nwxtc1.Text = snow(a + 1)
ElseIf b = 2 Then
nexta2.Text = snow(a - 1)

nextb2.Text = snow(a)

nwxtc2.Text = snow(a + 1)
ElseIf b = 3 Then
nexta3.Text = snow(a - 1)

nextb3.Text = snow(a)

nwxtc3.Text = snow(a + 1)
ElseIf b = 4 Then
nexta4.Text = snow(a - 1)

nextb4.Text = snow(a)

nwxtc4.Text = snow(a + 1)

End If

GoTo Line0

End Sub
xiaoohoo 2009-07-05
  • 打赏
  • 举报
回复
不能调试你的程序:
看看MSDN的解释,你就明白了!

Private Sub Form_Load()
GotoStatementDemo
End Sub


Sub GotoStatementDemo()
Dim Number, MyString


Number = 1 ' 设置变量初始值。
' 判断 Number 的值以决定要完成那一个程序区段(以“程序标签”来表式)。
If Number = 1 Then GoTo Line1 Else GoTo Line2

Debug.Print "这里没有执行"


Line1:
MyString = "Number equals 1"
GoTo LastLine ' 完成最后一行。

Line2:
' 下列的语句根本不会被完成。
MyString = "Number equals 2"

LastLine:

Debug.Print MyString ' 将“"Number equals 1"”显示在“立即”窗口。

End Sub


按F8调试 一下!
penguinhzf 2009-07-05
  • 打赏
  • 举报
回复
把next a移动到goto的上面

Private Sub Command1_Click()
snow(1) = Mid(Text1.Text, 1, 2)
snow(2) = Mid(Text1.Text, 3, 3)
snow(3) = Mid(Text1.Text, 6, 3)
snow(4) = Mid(Text1.Text, 9, 3)
snow(5) = Mid(Text1.Text, 12, 3)
snow(6) = Mid(Text1.Text, 15, 3)
snow(7) = Mid(Text1.Text, 18, 3)
snow(8) = Mid(Text1.Text, 21, 3)
bijiao(1) = Mid(Text2.Text, 1, 2)
bijiao(2) = Mid(Text2.Text, 3, 3)
bijiao(3) = Mid(Text2.Text, 6, 3)
bijiao(4) = Mid(Text2.Text, 9, 3)
b = 0
For a = 1 To 8
If snow(a) = bijiao(1) Then
GoTo Line1
ElseIf snow(a) = bijiao(2) Then
GoTo Line1
ElseIf snow(a) = bijiao(3) Then
GoTo Line1
ElseIf snow(a) = bijiao(4) Then
GoTo Line1
Else
End If
Next a

Line1:

b = b + 1
If b = 1 Then
nexta1.text = snow(a - 1)
nextb1.text = snow(a)
nwxtc1.text = snow(a + 1)
ElseIf b = 2 Then
nexta2.text = snow(a - 1)
nextb2.text = snow(a)
nwxtc2.text = snow(a + 1)
ElseIf b = 3 Then
nexta3.text = snow(a - 1)
nextb3.text = snow(a)
nwxtc3.text = snow(a + 1)
ElseIf b = 4 Then
nexta4.text = snow(a - 1)
nextb4.text = snow(a)
nwxtc4.text = snow(a + 1)

End If

End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧