下标越界解决办法

下标越界VB codePrivate Sub gcw_Click(Index As Integer)Dim tr(5) As StringDim dm1() As String, dm2()

下标越界

VB code
Private Sub gcw_Click(Index As Integer)Dim tr(5) As StringDim dm1() As String, dm2() As Double, h1() As Double, ss() As DoubleDim xo1() As Double, yo1() As Double, hd2() As Double, hz2() As DoubleDim nb() As DoubleDim i As IntegerDim k As IntegerDim h As IntegerDim t1, n, t, e, q, j  As IntegerSelect Case IndexCase 0Text1.Visible = FalseCommonDialog1.ShowOpenfname = CommonDialog1.FileName '将用户在"打开"对话框中选择的文件名对变量fname赋值If fname <> "" Then '若无此判断当对话框中选择取消时、下面赋值语句将出错    Set ts = fso.OpenTextFile(fname) '将fname作为文本文件打开,并设置句柄    j = 0: k = 0:  e = 0 'j是测站数累计变量,k是已知点累计变量    Do While ts.AtEndOfLine <> True '前测型循环,进入循环的条件是没有读到文件结束尾     B = ts.ReadLine '读一行,置入b     B = Trim(B): i = 1: '删除B可能有的前导和尾随空格,i是工作变量,     m(i) = InStr(B, ",") '查行中第一个逗号的左数位置,并保存在整形数组变量m(i)中     Do While m(i) <> 0 '前测型Do... Loop循环,成立条件是该行字符串中有逗号        tr(i) = Mid(B, m(i - 1) + 1, m(i) - m(i - 1) - 1) '提取指定位置开始的指定数目字符。        i = i + 1        m(i) = InStr(m(i - 1) + 1, B, ",") '从上一个找到的逗号位置起,查找下一个逗号的位置     Loop     If m(i) = 0 And i > 1 Then tr(i) = Right(B, Len(B) - m(i - 1)) '处理一行中最后一个逗号后的字符串          If m(4) <> 0 Then     k = k + 1: ReDim Preserve ym(k): ReDim Preserve yo(k): ReDim Preserve xo(k): ReDim Preserve hd1(k): ReDim Preserve hz1(k):     ym(k) = tr(1): yo(k) = tr(2): xo(k) = tr(3): hd1(k) = tr(4): hz1(k) = tr(5)     Else     j = j + 1: ReDim Preserve dm1(j): ReDim Preserve dm2(j): ReDim Preserve h1(j): ReDim Preserve ss(j):     dm1(j) = tr(1): dm2(j) = tr(2): h1(j) = tr(3): ss(j) = tr(4)     End If     Loop   MsgBox "数据已成功读入", 0 + 64 + 0, "数据输入"   End If   yds = k   zds = k + j  Text1.Text = ss(j)   Text1.Visible = True 'text1不可编辑   gcw(1).Enabled = True     Case 1 '解算近似高程     Text1.Visible = True     Dim n1 As Integer, n2 As Integer     Dim l1 As Double, pp As Double     ll = 0: n1 = yds:     n2 = n1 * (n1 + 1) / 2     ReDim NX(n2), UX(n1), nb(n2)  For i = 1 To yds     A1 = 1: A2 = xo(i): A3 = yo(i): A4 = xo(i) * yo(i): A5 = xo(i) ^ 2: A6 = yo(i) ^ 2     nb(1) = A1: nb(2) = A2: nb(3) = A3: nb(4) = A4: nb(5) = A5: nb(6) = A6     l1 = hd1(i) - hz1(i)     pp = 1     Call equation(nb(), pp, l1)     ll = ll + pp * l1 ^ 2 '累积用于求[pvv]的[Pll]值  Next i     MsgBox "结算完毕"  gcw(2).Enabled = True  gcw(3).Enabled = True    Case 2 '组法方程    Text1.Text = dm2(n)'n为不大于读入维数MsgBox ("法方程组成完毕")

在运行到case2时出现下标越界问题,如果改为text1.text=yo(n)又不会出现下标越界问题,请各位高手帮忙解答一下谢谢了。

[解决办法]
探讨
这条路径下 dm2 没有 Redim.

[解决办法]
兄弟,你这是局部变量,每次进来都是空的。

[解决办法]
VB code
If m(4) <> 0 Then     ...yo(k) = tr(2)Else     ...dm2(j) = tr(2)End If