利用职位here,我能够构建一个VBA宏来比较工作表之间的单元格以适应我的目的。但是,到目前为止,我没有测试它的范围不是从A1开始的。比较工作表之间的单元格,范围不在A1上开始
当给出像B1:X50这样的范围时,我遇到一个问题,即在给定范围的开始处的列为2(B)时,表单数组的列维的LBound为1。这里是我正在使用一个代码的部分:
'Define the range to be checked
strRangeToCheck = Summary_ws.Range("I2").Value
'Store the range to be checked on each sheet in an array
varSheetA = New_Data_ws.Range(strRangeToCheck)
varSheetB = Old_Data_ws.Range(strRangeToCheck)
'Clear current highlighted cells on data tabs
New_Data_ws.Cells.Interior.Color = xlNone
Old_Data_ws.Cells.Interior.Color = xlNone
'Initialize counter
Counter = 0
Counter_rng.Value = Counter
For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
On Error GoTo Err_Handler
If IsError(New_Data_ws.Cells(iRow, iCol).Value) Or IsError(Old_Data_ws.Cells(iRow, iCol).Value) Then
Counter = Counter + 1
Error_Flag = True
Call Flag_Changes
ElseIf varSheetA(iRow, iCol) = varSheetB(iRow, iCol) And _
Len(varSheetA(iRow, iCol)) = Len(varSheetB(iRow, iCol)) Then
'Cells are identical and lengths match
'Do Nothing
Else 'Cells are different
Counter = Counter + 1 'increment counter
Error_Flag = False
Call Flag_Changes
End If
Next iCol
Next iRow
我能够评估strRangeToCheck以确定它是否开始于列A或不是。根据这一决定,是否可以手动设置工作表的LBound以匹配strRangeToCheck中的起始列?
这行会为你创建一个问题,因为它只有一个单元格strRangeToCheck = Summary_ws.Range(“I2”)。Value你的范围总是一个单元格,或者它可能不止一个单元格? – Ibo
该单元格包含用户提供的字符串,如A1:Z100。如果他们提供的范围无效,则会引发错误。 – kschindl