dim myini(8) as string
dim i as integer
For i = 0 To 8
myini(i) = 这里是一些代码
Next
运行时,VB提示下标越界,哪里越界了?为什么?怎么修改?
全部代码:
Private Sub Form_Load()
'添加combo控件的选项
For zm = 65 To 90
Combo1.AddItem Chr(zm)
Combo3.AddItem Chr(zm)
Combo5.AddItem Chr(zm)
Combo7.AddItem Chr(zm)
Next
For jp = 0 To 9
Combo2.AddItem "F" & jp
Combo4.AddItem "F" & jp
Combo6.AddItem "F" & jp
Combo8.AddItem "F" & jp
Next
'加载用户配置文件
Open App.Path & "\配置文件.lbj" For Input As #2
Dim ini As String
Input #2, ini
Dim i As Integer
For i = 0 To 8
myini(i) = Split(ini, vbCrLf)(i)
Next
End Sub
数组我在声明处已经定义了。
经过我多次调试后,我发现,qw623577789说的很对,出在换行符上面。我的文件一共有9行。VB可能在读取文件时忽略了换行符。该怎么解决? 下午的时候停电了。
终于搞清楚真正原因了。问题出在变量ini上面。当我把文件内容复制给ini的时候,我发现,ini的值仅是第一行的内容,后面的内容全被省略了!!!怪不得下标越界。怎么把后面的内容读进来?
代码已给出。
追答原来是这里出的问题
Open App.Path & "\配置文件.lbj" For Input As #2
Dim ini As String
Input #2, ini
Dim i As Integer
For i = 0 To 8
myini(i) = Split(ini, vbCrLf)(i) '这一句后面的部分出问题
Next
这样改:
Open App.Path & "\配置文件.lbj" For Input As #2
Dim ini As String
Dim i As Integer
do while i<9
line Input #2, ini
myini(i) =ini
loop
Close #2
没有。
追答问题出在数据读取上,因为从程序看来,myini(i) = Split(ini, vbCrLf)(i)中,myini(i)的下标不会超过8,不可能越界,但Split(ini, vbCrLf)(i)中的i可能越界。建议程序改为:
Dim ini As String
Dim i As Integer
For i = 0 To 8
Input #2, ini ‘每次从文件中读一行
myini(i) = Split(ini, vbCrLf)(0)
Next
代码已给出。
追答Split(ini, vbCrLf)(i)这句出了问题,
你检查一下ini字符串里是否换行符,如果没有当i超过0时,就会提示下表出界
换行符是肯定有的,因为这是从我的一个配置文件里读出来的。这是我前面生成文件的代码:
Open App.Path & "\配置文件.lbj" For Output As #1
Print #1, Combo1.Text & " " & Combo2.Text & " IE隐藏快捷键" & vbCrLf & Combo3.Text & " " & Combo4.Text & " IE显示快捷键" & vbCrLf & Combo5.Text & " " & Combo6.Text & " 程序隐藏快捷键"
字数限制,省略部分代码。
VB6数组下标越界?
这是因为在把用户名和密码存入文件时,最后会多出一个回车换行符,也就是说最后一行是个空白行(你用记事本打开文件就知道了),这样的话当用line input循环读取每行时,到最后就会读到一个空白字符串,这样的话u(1)就会提示下标越界了。因此要先判断 UBound(u) 是不是等于1,然后再来判断u(0)和...
vb下标越界
其实错误提示说的很明显了。下标越界就是下表超过上,或者下限了呗。VB6中的自定义数组默认下标是从0开始的,那么距离说明你要操作一个有 10个内容的数组的话,下标就是 0 to 9 。明白了吗。
请教VB6.0下标越界问题
第一个下标越界是发生在重新定义A、B两个数组,使其长度为N-1的时候。那么我们来看此时的N来源。Dim N As Integer ,此时N为0,经过清点文本内行首字符为“<>”后,N被重新赋值,此时的N是一个计数器。如果,文本内所有行首均无“<>”,那么ReDim A(N - 1), B(N - 1)◀ 将是一...
VB6.0 为什么下标越界?
Dim a(9) As Integer 或者 Dim a(10) As Integer
VB6数组下标越界
我的VB并没有报错,可能是你的“这里是一些代码”所代表的代码有问题。说明下,在vb中,跟C语言有区别 C语言中,int a[10],变示你只能使用a[0]到a[9]这些元素 但是,VB中,Dim a(10) As Integer,你可以使用a(0)到a(10)这些元素。
vb6.0 redim出现下标越界,下面是一个读取二进制文件的操作,
rdata(LOF(1) - 1) As Byte Get #1, , rdata Close #1End SubPrivate Sub Command1_Click() Dim rdata() As Byte Call ReadByte("c:\\1.txt", rdata) Debug.Print UBound(rdata) + 1 '使用后要手动清除下动态数组 Erase rdataEnd Sub ...
VB6使用ReDim提示下标越界
你在这两行代码中加一行代码,跟踪一下变量的值,看一看就知道问题了:ReDim myfile.Files(1)debug.print LOF(1),EXE_SIZE,LOF(1) - EXE_SIZE '这里是加的一句代码 ReDim myfile.Files(1).Bytes(1 To LOF(1) - EXE_SIZE)到立即窗口里看一看,LOF(1) - EXE_SIZE的值是大于或等于...
vb6.0局域网传输问题,实时错误9下标越界求解答
[msdn]下标越界(错误 9)只能在定义的范围内访问数组元素和集合成员。此错误有以下的原因:引用了不存在的数组元素.引用了不存在的集合成员。
vb6中产生随机数下标越界问题,求高人指点错误之处
Click()dim a(7) as integer For i = 0 To 7 way1:Randomize a(i) = Int(Rnd() * 256) Mod 16 If i > 0 Then For p = 0 To i - 1 If a(p) = a(i) Then '与前面的对比,如果有重复,重新随机 GoTo way1 End If Next p End If Print a(i)Next i ...
VB6. 0 为什么下标越界?
最小值后,i才增加1 ReDim Preserve a(i) 'i的值增加后,数组的大小也要相应改变 Loop If i <> 0 Then '考虑到程序的健壮,还要考虑到这种情况 average = sum \/ i Print "该班平均分为" & average Print "学号为" & maxi;...