回 帖 发 新 帖 刷新版面

主题:[原创]下标越界?

Private Sub MSC_OnComm()
Select Case MSC.CommEvent
       Case comEvReceive
        Do
         buf = MSC.Input
         T = T + 1
         If T > 10000 Then Exit Do
       Loop Until (Left(buf, 1) = "=" And Len(buf) = 9)                                     
                                ‘保证buf是一个以  “=“开始的 9位数据,用do…loop进行循环等待。

ReDim ary(Len(buf))                              
        For i = 1 To Len(buf)
        ary(i - 1) = Mid(buf, i, 1)
        Next                                       ‘将buf重新定义为数组型
     [color=FF0000]If ary(Len(buf) - 1) = "-" Then              [/color]‘判断buf的最高位是否为“-“
        For i = 0 To Len(buf) - 1
        buf1 = buf1 + ary(i)
        Next
        txtReceive1.Text = buf1              ‘如果为“-”,将赋值给txtReceive1.Text
        buf1 = ""
     Else
        For i = 0 To Len(buf) - 1
        buf1 = buf1 + ary(i)
        Next
        txtReceive2.Text = buf1                   ‘否则将赋值给txtReceive2.Text
        buf1 = ""
    End If
     Case comEvSend
End Select
End Sub

为什么在运行时,有的时候正常,有的时候在If ary(Len(buf) - 1) = "-" Then  这一句会出现错误提示:下标越界,

真的不知哪儿错了,想请高手帮帮忙!

回复列表 (共17个回复)

沙发

If T > 10000 Then Exit Do
?????????????????????????

板凳

为了保证不是死循环,确定的循环次数

3 楼

[quote]if right(buf,1)="-" then txtReceive1.Text=buf else txtReceive2.Text=buf[/quote]

4 楼

谢谢moz, 你说的这个我以前用过了,是没问题的,
  现在的问题是:If ary(Len(buf) - 1) = "-" Then   这个语句为什么会出现     下标越界  这个错误?

5 楼

在这一行出错的时候,
点击调试,
Ctrl + G 进入立即窗口
? len(buf)  检查一下值到底是多少

6 楼

是0呀

7 楼

嗯,是零,为什么会是零,是零的话还不是越界吗?

8 楼

是呀!看来前面的do...loop语句还是无法保证每一次(Left(buf, 1) = "=" And Len(buf) = 9)  成立

9 楼

我也没话说了,潜水去.

10 楼

首先, 建议在循环次数达到10000次准备退出循环前,添加buf="=00000000",表示连续错误数据或者为接收到初始化数据。

下标越界的问题我觉得不是在  If ary(Len(buf) - 1) = "-" Then  这一句,
而是他的下一句  For i = 0 To Len(buf) - 1
你试者将这句改成  For i = 0 To Len(buf) - 1 [color=FF0000]step 1[/color][color=000000][color=000000]我以前遇到过一次类似的问题,可能是由于-1的原因,vb系统时误以为-1前漏掉了step关键词[/color][/color]

我来回复

您尚未登录,请登录后再回复。点此登录或注册