怎么每次调试都说下标越界呢?着急!!再次感谢!!
我的1文件是这样的:
3 4 5 6 2 4 6 8 1 8
2 3 4 5 6 6 7 2 8 9
1 3 4 5 6 7 8 6 1 9
1 2 5 6 3 9 4 3 4 5 
2 3 4 5 6 7 3 2 1 4
1 3 2 5 4 6 8 7 6 3
3 4 5 6 3 1 2 3 4 6 
2 6 8 8 5 6 7 8 4 3
1 3 4 5 6 7 8 5 4 3
                         
Private Sub laplace_Click()
Dim m, n, t As Integer
Dim s As Single
Dim filename As String
Dim i, j As Integer
m = InputBox("请输入m=")
n = InputBox("请输入n=")
t = InputBox("请输入T=")
ReDim a(m, n)
ReDim b(m, n)
CommonDialog1.ShowOpen
filename = CommonDialog1.filename
If filename = "" Then Exit Sub
Form3.Caption = filename
Form3.Show
Open filename For Input As #1
 For i = 1 To m
    For j = 1 To n
     Input #1, a(i, j)
         Next j
 Next i
 Close #1
 For i = 1 To m
   For j = 1 To n
   If i = 1 And j = 1 Then
   s = a(1, 2) + a(2, 1) + a(1, n) + a(m, 1) - 4 * a(i, j)
   ElseIf i = 1 And j = n Then
   s = a(1, n - 1) + a(1, 1) + a(2, n) + a(m, n) - 4 * a(i, j)
   ElseIf i = m And j = 1 Then
   s = a(m - 1, j) + a(m, 2) + a(1, 1) + a(m, n) - 4 * a(i, j)
   ElseIf i = m And j = n Then
   s = a(m, n - 1) + a(m - 1, n) + a(m, 1) + a(1, n) - 4 * a(i, j)
   ElseIf i > 1 And i < m And j = 1 Then
   s = a(i - 1, j) + a(i + 1, j) + a(i, j + 1) + a(i, n) - 4 * a(i, j)
   ElseIf i = 1 And j > 1 And j < n Then
   s = a(i, j - 1) + a(i, j + 1) + a(m, j) + a(i + 1, j) - 4 * a(i, j)
    ElseIf i > 1 And i < m And j = n Then
   s = a(i - 1, n) + a(i + 1, n) + a(i, n - 1) + a(i, 1) - 4 * a(i, j)
   ElseIf i = m And j > 1 And j < n Then
   s = a(i, j - 1) + a(i, j + 1) + a(1, j) + a(i - 1, j) - 4 * a(i, j)
   Else
   s = a(i - 1, j) + a(i + 1, j) + a(i, j + 1) + a(i, j - 1) - 4 * a(i, j)
   End If
   If s > t Then
   b(i, j) = 1
   Else: b(i, j) = 0
   End If
   Form3.Print b(i, j);
   Next j
   Form3.Print
Next iEnd SubPrivate Sub omatrax_Click()
Dim m, n As Integer
Dim filename As String
Dim i, j As Integer
Dim currentx, currenty As Single
m = InputBox("请输入m=")
n = InputBox("请输入n=")
ReDim a(m, n)
CommonDialog1.ShowOpen
filename = CommonDialog1.filename
If filename = "" Then Exit Sub
Form3.Caption = filename
Form3.Show
Open filename For Input As #1
 For i = 1 To m
    For j = 1 To n
     Input #1, a(i, j)
     Form3.Print a(i, j);
     Form3.Print Space(2);
    Next j
    Form3.Print
    Form3.Print
 Next i
 Close #1
End Sub

解决方案 »

  1.   

    redim有问题,不要不断的使用redim。应使用redim preserve。另外a()/b()应定义为模块变量或全局变量。
      

  2.   

    还有,循环中已经规定for j=1 to N,其下面的语句如果存在 a(i, j + 1),这时就会出现下标越界,因为j最大为N,redim 后的数组下标最大也是N,如果j正好等于N,不就已经超出定义了吗?
      

  3.   

    又,所有的数组基数都是从0开始的,这个你的程序中好象也没有反映出来。也就是说,你的
    for i =1 to m
       for j = 1 to n
       ---
       next j
    next i
    都应该改为
    for i =0 to m-1
       for j = 0 to n-1
       -----
       next j
    next i
      

  4.   

    但是在内层已经限定呀
      ElseIf i > 1 And i < m And j = 1 Then
       s = a(i - 1, j) + a(i + 1, j) + a(i, j + 1) + a(i, n) - 4 * a(i, j)
    比如这个i必须小于m,那么为什么i+1还会越界呢?
    关于数组基数问题,考虑到了,但是我认为它不会影响吧!
      

  5.   

    redim preserve A(m, n)
    'preserve保存
      

  6.   

    你在出错的那一句的前面加上msgbox i & vbcrlf j,查看这两个值是怎么回事。