使用VBA匹配excel中两个不同工作表的两列的值

这里是我的代码下面我试图编写一个程序来匹配使用此代码使用vba两个不同的工作表的值两列


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, difference As Long Set report = Workbooks.Add With ws1.UsedRange ws1row = .Rows.Count ws2col = .Columns.Count End With With ws2.UsedRange 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 = ws1.Cells(Row, col).Formula If colval <> 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 cells contain different data", vbInformation, "Comparing two worksheet " End Sub 

代码为button


 Private Sub CommandButton1_Click() Compare2Worksheets Worksheets("Sheet1"), Worksheets("Sheet2") End Sub 

我在这里得到一个错误

 MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data", vbInformation, "Comparing two worksheet " 

作为一些types不匹配的错误,而我试图点击运行该程序的button,请帮助我解决错误…

您的MsgBox包含太多的String参数。 尝试将其更改为以下代码:

 MsgBox difference & " cells contain different data! ", vbInformation, "Comparing Two Worksheets cells contain different data" 

除此之外,你的路线:

 If colval <> colval2 Then 

应该:

 If colval1 <> colval2 Then 

此外,尽量不要使用Row作为variables,因为它是一个保存的Excel“单词”,而不是使用iRow (或其他任何东西)。


试试下面的代码(代码注释中的解释):

 Dim wsResult As Worksheet Set report = Workbooks.Add Set wsResult = report.Worksheets(1) ' <-- set the worksheet object With ws1.UsedRange ws1row = .Rows.Count ws1col = .Columns.Count '<-- had an error here (was `ws2col`) End With With ws2.UsedRange ws2row = .Rows.Count ws2col = .Columns.Count End With ' Use Max function maxrow = WorksheetFunction.Max(ws1row, ws2row) maxcol = WorksheetFunction.Max(ws1col, ws2col) 'maxrow = ws1row 'maxcol = ws1col 'If maxrow < ws2row Then maxrow = ws2row 'If maxcol < ws2col Then maxcol = ws2col difference = 0 For col = 1 To maxcol For iRow = 1 To maxrow colval1 = "" colval2 = "" colval1 = ws1.Cells(iRow, col).Formula colval2 = ws2.Cells(iRow, col).Formula ' <-- you had an error here, you used `colval1 = ws1.Cells(Row, col).Formula` If colval1 <> colval2 Then '<-- you had an error here (used `If colval <> colval2`) difference = difference + 1 ' don't rely on ActiveSheet, use the wsResult worksheet object wsResult.Cells(iRow, col).Formula = colval1 & "<>" & colval2 wsResult.Cells(iRow, col).Interior.Color = 255 wsResult.Cells(iRow, col).Font.ColorIndex = 2 wsResult.Cells(iRow, col).Font.Bold = True End If Next iRow Next col wsResult.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 cells contain different data" 

variablesmaxcolumn未初始化(请参阅下面的代码中的注释)

 With ws1.UsedRange ws1row = .Rows.Count ws2col = .Columns.Count //it should be: ws1col End With With ws2.UsedRange ws2row = .Rows.Count ws2col = .Columns.Count End With maxrow = ws1row maxcol = ws1col