Excelmacros下标超出范围错误

我有下面的macros,获取脚本超出范围错误If arr(0) <> opt Then arr(0) = VAL_DIFF

如果我看到该数组的长度显示2.我不明白为什么我不能访问ARR(0),因为我知道数组总是以0.我能打印ARR(1),ARR(2) )值。

下面的macros能够find类似的logging,并复制到sheet2.Here我也想用sheet1中的颜色突出显示。 请帮帮我。

 Option Base 1 Sub Tester() Const COL_ID As Integer = 1 Const COL_SYSID As Integer = 2 Const COL_STATUS As Integer = 4 Const COL_OPTION As Integer = 3 Const VAL_DIFF As String = "XXdifferentXX" Dim d As Object, sKey As String, id As String Dim rw As Range, opt As String, rngData As Range Dim rngCopy As Range, goodId As Boolean Dim FirstPass As Boolean, arr With Sheet1.Range("A1") Set rngData = .CurrentRegion.Offset(1).Resize( _ .CurrentRegion.Rows.Count - 1) End With Set rngCopy = Sheet1.Range("F2") Set d = CreateObject("scripting.dictionary") FirstPass = True redo: For Each rw In rngData.Rows sKey = rw.Cells(COL_SYSID).Value & "<>" & _ rw.Cells(COL_STATUS).Value If FirstPass Then 'Figure out which combinations have different option values ' and at least one record with id=US or CHN id = rw.Cells(COL_ID).Value goodId = (id = "US" Or id = "CHN") opt = rw.Cells(COL_OPTION).Value If d.exists(sKey) Then arr = d(sKey) 'can't modify the array in situ... If arr(1) <> opt Then arr(1) = VAL_DIFF If goodId Then arr(2) = True d(sKey) = arr 'return [modified] array Else d.Add sKey, Array(opt, goodId) End If Else 'Second pass - copy only rows with varying options ' and id=US or CHN If d(sKey)(2) = VAL_DIFF And d(sKey)(1) = True Then rw.Copy rngCopy Set rngCopy = rngCopy.Offset(1, 0) End If End If Next rw If FirstPass Then FirstPass = False GoTo redo End If End Sub 

停止使用模块顶部的选项库1。 这似乎使事情变得更容易,但最终只会造成混乱。 我已经给你提供了着色范围的答案 – 请尝试在这里张贴之前先试一试。

要检查数组的下限位置,请使用Lbound(arr)

另外,你并没有将数组初始化为arr。 像这样初始化它: Dim arr() As Variant

您也可以指定数组的较低维度和较高维度。 Dim arr(3 To 10) As Variant 。 这将创build一个由零开始的7个元素的数组。 我build议通过Googlesearch学习更多关于VBA中的数组的知识。