【发布时间】:2017-05-08 23:29:00
【问题描述】:
我有下面的代码来比较两张纸之间的数据并突出显示差异。但它给了我一个
运行时错误'6'溢出
在compareSheets过程中,同时执行if条件。
有人可以帮我解决这个问题吗?
Sub RunCompare()
'Call the compareSheets routine
Call compareSheets("Sheet1", "Sheet2")
End Sub
Sub compareSheets(Sheet1 As String, Sheet2 As String)
Dim mycell As Range
Dim mydiffs As Integer
For Each mycell In ActiveWorkbook.Worksheets("Sheet2").UsedRange
If Not mycell.Value = ActiveWorkbook.Worksheets("Sheet1").Cells(mycell.Row, mycell.Column).Value Then
mycell.Interior.Color = vbYellow
mydiffs = mydiffs + 1
End If
Next
MsgBox mydiffs & " differences found", vbInformation
End Sub
【问题讨论】:
-
参见 Documentation.SO 上的 Integer data type。溢出错误意味着您正在突破该限制。解决方案是使用可以适合您尝试分配的值的类型。
ActiveWorkbook.Worksheets("Sheet2").UsedRange中有多少个单元格?如果超过 32,767,Integer将溢出。试过Long? -
mydiffs 增量上的哪一行?我
-
FWIW 还有其他问题:您的
CompareSheets过程没有使用它的参数,这些参数很可能隐藏/隐藏了Sheet1和Sheet2这些各自的全局范围对象变量ThisWorkbook中的工作表,并且该评论完全没有说明代码没有说明的内容,应该删除。参数可以通过ByVal传递,并且可以是Worksheet类型而不是String,它们是工作表而不是工作表名称该过程并使其在ActiveWorkbook之外工作。