vb数组下标越界(急)那位天使帮个忙啊!

来源:百度知道 编辑:UC知道 时间:2024/09/23 07:11:29
Option Explicit
Dim n As Integer

Public Sub factor(ByRef b() As Integer)
Dim p As Integer, i As Integer, k As Integer
p = n
ReDim b(k)
Do While n <> 1
For i = 2 To p
If n Mod i = 0 Then b(k) = i: k = k + 1: n = n / i: Exit For
Next i
Loop
End Sub

Private Sub Command1_Click()
Dim a() As Integer, i As Integer
n = Val(Text1.Text)
Call factor(a())
For i = 1 To UBound(a()) - 1
Text2.Text = Text2.Text & a(i) & "*"
Next i
Text2.Text = Text2.Text & a(i)
End Sub

Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text1.SetFocus
End Sub

别问人了用F8单步调试吧,下标记超么肯定是定义的时候少定义了一个

3 楼的 朋友 已经 注意到了!

ReDim b(k) 时,你的 k 没有赋值,就是 0 了,数组 b 只有 一个 元素 b(0) 了!

但 循环 中 k 的值在增加,这样 引用 b(k) 显然 下标 越界!

不知你的编程 目的

祝你顺利吧

ReDim b(k)
Do While n <> 1
For i = 2 To p
If n Mod i = 0 Then b(k) = i: k = k + 1: n = n / i: Exit For
Next i
Loop
你在do 循环外已经定义好b数组的维数 而你来循环内却增加k的大小 b维数本身就没那么大。当然会出错~
你应该把redim 写在 b(x)=i 前面

Option Explicit 语句 在模块级别中使用,强制显式声明模块中的所有变量。语法Option Explicit说明如果使用,Option Explicit 语句必须写在模块的所有过程之前。如果模块中使用了 Option Explicit,则必须使用 Dim、Private、Public、ReDim 或 Static 语句来显式声明所有的变量。如果使用了未声明的变量名在编译时间会出现错误。如果没有使用 Option Explicit 语句,除非使用 Deftype 语句指定了缺省类型,否则所有未声明的变量都是 Variant 类型的。注意 使用 Option Explicit 可以避免在键入已有变量时出错,在变量的范围不是很清楚的代码中使用该语句可以避免混乱。
编译器的默认设置将是 Option Explicit On。
示例
本示例使用 Option Explicit 语句强制所有变量的显式声明。试图使用未声明的变量将导致编译时错误。Option Explicit 语句只用在模块级。
Option Explicit ' Force explicit variable declaratio