VB,这个程序为什么会下标越界,最后的数组为什么没有只有A2的元素而没有A1的元素

来源:百度知道 编辑:UC知道 时间:2024/05/16 14:37:54
Dim A, A1, A2 As Variant

Private Sub Command1_Click()

Select Case Combo1.ListIndex
Case 0
A1 = Array(0.8, 0.2, 0, 0, 0)
Case 1
A1 = Array(0, 0.2, 0.6, 0.2, 0)
Case 2
A1 = Array(0, 0, 0, 0.2, 0.8)
End Select

Select Case Combo2.ListIndex
Case 0
A2 = Array(0.8, 0.2, 0, 0, 0)
Case 1
A2 = Array(0, 0.2, 0.6, 0.2, 0)
Case 2
A2 = Array(0, 0, 0, 0.2, 0.8)
End Select

A = Array(Join(A1, ","), Join(A2, ","))

For i = 0 To 9
Label1.Caption = A(i) & " "
Next

End Sub

A = Array(Join(A1, ","), Join(A2, ","))
这个A中有2个元素,最大下标是1,所以For i = 0 To 9肯定下标越界

如果你要直接输出A:
Label1.Caption = join(A)

如果你想将这A1,A2二个数组合二为一:
A = Array(Join(A1, ","), Join(A2, ","))
A=join(a,",") ‘先将上面的数组A转化为以逗号分隔的字符串(因为A的二个元素join(A1,",")和join(A2,",")是用逗号分隔的字符串)
然后再用split按逗号分隔为数组:
A = split(a,",")
这样如果你A1和A2加起来有10个元素,就可以For i = 0 To 9了
当然直接输出还是用:

Label1.Caption = join(A)

对于Variant数组,如果元素非objext非数组,可以用join方法合并,先不谈效率(没测试),如果任意多个这样的数组要合并,这样代码少许多吧:
Function MergeArray(ParamArray arr()) As Variant

Const COMPART = "`" '统一分隔符
Dim i As Long
Dim n As Long

n = UBound(arr)
ReDim tmp(n)
For i = 0 To n
tmp(i) = Join(arr(i), COMPART)
Next
MergeArray = Join(tmp, COMPART)
MergeArray = Split(MergeArray, COM