下标越界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)又不会出现下标越界问题,请各位高手帮忙解答一下谢谢了。
[解决办法]
[解决办法]
兄弟,你这是局部变量,每次进来都是空的。
[解决办法]
- VB code
If m(4) <> 0 Then ...yo(k) = tr(2)Else ...dm2(j) = tr(2)End If
