Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1645|回复: 2

[已解决]请高手帮助查找代码下标越界原因

[复制链接]
发表于 2013-4-4 21:48 | 显示全部楼层 |阅读模式
请高手帮助查找代码 result(l, m) = arr1(i, m)下标越界原因。谢谢
最佳答案
2013-4-4 22:10
  1. Private Sub 相同_Click()


  2.     Dim arr1, arr2
  3.     Dim key1 As String
  4.     Dim result()
  5.     Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer
  6.     Dim blCancel As Boolean

  7.     arr1 = Range("a1:j252")
  8.     arr2 = Range("a254:j505")
  9.     ReDim result(1 To UBound(arr1), 1 To UBound(arr1, 2))
  10.     For i = LBound(arr1) To UBound(arr1)
  11.         For j = LBound(arr1) To UBound(arr1)
  12.             blCancel = False
  13.             key1 = ""
  14.             For k = LBound(arr1, 2) To UBound(arr1, 2)
  15.                 key1 = key1 & arr1(i, k)
  16.                 If arr1(i, k) <> arr2(j, k) Then
  17.                     blCancel = True
  18.                     Exit For
  19.                 End If
  20.             Next
  21.             If Not blCancel And Len(key1) > 0 Then
  22.                 Debug.Print "arr1(" & i & "--arr2)" & j
  23.                 l = l + 1
  24.                 For m = LBound(arr1, 2) To UBound(arr1, 2)
  25.                     result(l, m) = arr1(i, m)
  26.                 Next
  27.             End If
  28.         Next
  29.     Next
  30.     If l > 0 Then
  31.         Range("a4049").Resize(l, UBound(arr1, 2)) = result
  32.     Else
  33.         MsgBox "无相同的数据行"
  34.     End If

  35.     arr1 = Range("a507:j758")
  36.     arr2 = Range("a760:j1011")
  37.     ReDim result(1 To UBound(arr1), 1 To UBound(arr1, 2))
  38.     l = 0
  39.     For i = LBound(arr1) To UBound(arr1)
  40.         For j = LBound(arr1) To UBound(arr1)
  41.             blCancel = False
  42.             key1 = ""
  43.             For k = LBound(arr1, 2) To UBound(arr1, 2)
  44.                 key1 = key1 & arr1(i, k)
  45.                 If arr1(i, k) <> arr2(j, k) Then
  46.                     blCancel = True
  47.                     Exit For
  48.                 End If
  49.             Next
  50.             If Not blCancel And Len(key1) > 0 Then
  51.                 Debug.Print "arr1(" & i & "--arr2)" & j
  52.                 l = l + 1
  53.                 For m = LBound(arr1, 2) To UBound(arr1, 2)
  54.                     result(l, m) = arr1(i, m)
  55.                 Next
  56.             End If
  57.         Next
  58.     Next
  59.     If l > 0 Then
  60.         Range("a1012").Resize(l, UBound(arr1, 2)) = result
  61.     Else
  62.         MsgBox "无相同的数据行"
  63.     End If


  64. End Sub
复制代码

请都是帮助查找下标越界原因.rar

47.66 KB, 下载次数: 5

发表于 2013-4-4 22:09 | 显示全部楼层
代码第二部分取数据时,先把L置为0呢。
回复

使用道具 举报

发表于 2013-4-4 22:10 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub 相同_Click()


  2.     Dim arr1, arr2
  3.     Dim key1 As String
  4.     Dim result()
  5.     Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer
  6.     Dim blCancel As Boolean

  7.     arr1 = Range("a1:j252")
  8.     arr2 = Range("a254:j505")
  9.     ReDim result(1 To UBound(arr1), 1 To UBound(arr1, 2))
  10.     For i = LBound(arr1) To UBound(arr1)
  11.         For j = LBound(arr1) To UBound(arr1)
  12.             blCancel = False
  13.             key1 = ""
  14.             For k = LBound(arr1, 2) To UBound(arr1, 2)
  15.                 key1 = key1 & arr1(i, k)
  16.                 If arr1(i, k) <> arr2(j, k) Then
  17.                     blCancel = True
  18.                     Exit For
  19.                 End If
  20.             Next
  21.             If Not blCancel And Len(key1) > 0 Then
  22.                 Debug.Print "arr1(" & i & "--arr2)" & j
  23.                 l = l + 1
  24.                 For m = LBound(arr1, 2) To UBound(arr1, 2)
  25.                     result(l, m) = arr1(i, m)
  26.                 Next
  27.             End If
  28.         Next
  29.     Next
  30.     If l > 0 Then
  31.         Range("a4049").Resize(l, UBound(arr1, 2)) = result
  32.     Else
  33.         MsgBox "无相同的数据行"
  34.     End If

  35.     arr1 = Range("a507:j758")
  36.     arr2 = Range("a760:j1011")
  37.     ReDim result(1 To UBound(arr1), 1 To UBound(arr1, 2))
  38.     l = 0
  39.     For i = LBound(arr1) To UBound(arr1)
  40.         For j = LBound(arr1) To UBound(arr1)
  41.             blCancel = False
  42.             key1 = ""
  43.             For k = LBound(arr1, 2) To UBound(arr1, 2)
  44.                 key1 = key1 & arr1(i, k)
  45.                 If arr1(i, k) <> arr2(j, k) Then
  46.                     blCancel = True
  47.                     Exit For
  48.                 End If
  49.             Next
  50.             If Not blCancel And Len(key1) > 0 Then
  51.                 Debug.Print "arr1(" & i & "--arr2)" & j
  52.                 l = l + 1
  53.                 For m = LBound(arr1, 2) To UBound(arr1, 2)
  54.                     result(l, m) = arr1(i, m)
  55.                 Next
  56.             End If
  57.         Next
  58.     Next
  59.     If l > 0 Then
  60.         Range("a1012").Resize(l, UBound(arr1, 2)) = result
  61.     Else
  62.         MsgBox "无相同的数据行"
  63.     End If


  64. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 19:40 , Processed in 0.366491 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表