【发布时间】:2019-08-14 20:10:02
【问题描述】:
该代码应该比较两个 excel 文件,然后创建一个新的 excel 文件来显示差异。
在文件的第一张纸上,我创建了一个按钮,然后将其打开并放入代码。但是,当我运行代码时,我收到一个错误提示
对属性的不当使用
并且 .Worksheets 被标记。
或者问题可能与Private Sub CommandButton1_Click()有关。
我在网上做了一些研究,但没有成功,所以我希望能得到一些帮助。
选项显式
Sub Compare2WorkSheets(ws1 As Worksheet, ws2 As Worksheet)
Dim ws1row As Long, ws2row As Long, ws1col As Integer, ws2col As Integer
Dim maxrow As Long, maxcol As Integer, colval1 As String, colval2 As String
Dim report As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim difference As Long
Dim row As Long, col As Integer
Set report = Workbooks.Add
Set ws1 = ThisWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Worksheets(1)
With ThisWorkbook.Worksheets("Sheet1")
ws1row = .Rows.Count
ws1col = .Columns.Count
End With
With ThisWorkbook.Worksheets("Sheet2")
ws2row = .Rows.Count
ws2col = .Columns.Count
End With
maxrow = ws1row
maxcol = ws1col
If maxrow < ws2row Then maxrow = ws2row
If maxcol < ws2col Then maxcol = ws2col
difference = 0
For col = 1 To maxcol
For row = 1 To maxrow
colval1 = ""
colval2 = ""
colval1 = ws1.Cells(row, col).Formula
colval2 = ws2.Cells(row, col).Formula
If colval1 <> colval2 Then
difference = difference + 1
Cells(row, col).Formula = colval1 & "<> " & colval2
Cells(row, col).Interior.Color = 255
Cells(row, col).Font.ColorIndex = 2
Cells(row, col).Font.Bold = True
End If
Next row
Next col
Columns("A:B").ColumnWidth = 25
report.Saved = True
If difference = 0 Then
report.Close False
End If
Set report = Nothing
MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets"
End Sub
【问题讨论】:
-
ActiveWorkbook.Worksheets ("Sheet1")应该是With ActiveWorkbook.Worksheets("Sheet1") -
另外,使用正确的引号。不应该使用
“”,而是使用"" -
我编辑了代码并使用了正确的引用。现在我得到“有效范围之外的索引”
-
当前活动的工作簿中是否存在名为“Sheet1”的工作表?我强烈建议您不要参考活动工作簿。相反,声明一个工作簿或工作表变量,并最好使用工作表代号进行设置,如果不可能,请使用工作表的名称或索引。
-
欢迎来到 SO。您正在添加带有行
Set report = Workbooks.Add的新工作簿,以便新工作簿在工作表中具有默认名称。这些默认名称取决于您的语言设置。此外,当创建一个新工作簿时,它会变成活动的一个,所以实际上当您稍后执行ActiveWorkbook.Worksheets("Sheet1")时,您正在使用新工作簿,它是一个新工作簿,所以它完全是空白的。这可能会导致失败如果您尝试在执行此代码的工作簿中激活工作表,请使用ThisWorkbook而不是ActiveWorkbook