如何比较两个不同工作簿的列A excel vba

时间:2016-11-04 10:06:53

标签: excel vba excel-vba excel-2010

我有两个不同的工作簿,我想比较两个工作簿的第一列(A),并在List框中添加内容(工作簿1表1的A列中不存在的东西)。我写了一个代码,我的问题是我的代码比较不比较正确的事情。如果有人可以帮助我,我会很高兴。

Sub Bouton1_Cliquer()


Dim i As Long, lastA As Long, lastB As Long

Dim compare As Variant

Range("A:A").ClearFormats

Dim sh1 As Worksheet

Dim wkb As Workbook

Set wkb = Workbooks.Open("C:\Users\ZAGLIZ\Documents\Classeur1.xltm")

Set sh1 = wkb.Sheets("Feuil1")

lastA = Range("A65536").End(xlUp).Row

lastB = Range("B65536").End(xlUp).Row

For i = 2 To lastA

    compare = Application.Match(Range("A" & i), sh1.Range("B2" & lastB), 0)

        If IsError(compare) Then

 UserForm1.ListBox1.AddItem "Libellé : " & Range("A" & i) & "  du montant  " & 

Range("C" & i) & " est ajouté !"

        End If
Next i

UserForm1.Show

 End Sub

1 个答案:

答案 0 :(得分:0)

我们可以在问题中使用更清晰,因为描述和代码看起来有点矛盾,并且“不比较正确的事情对问题的描述不够。”您是按照说明比较两个工作表中的列a还是根据代码比较列a到列b?无论如何,我会尽力给你答案:

- 特别声明并使用您想要使用的书籍/工作表的名称,您只需多次参考范围,在工作表之间工作时不明确,可能会导致问题,具体取决于您的按钮所在位置

- sh1.Range("B2" & lastB)没有按你的想法做,它应该是sh1.Range("B2:B" & lastB)(如果它应该是b列)

- 这只会检查“单向”,并且您的问题不清楚这是否是您打算/正在检查右侧表中的缺失值。您可能需要第二次匹配来检查不相反的内容,或者您​​可能希望切换逻辑以检查其他工作表

编辑:根据你的评论尝试下面的代码,把它放在一个模块中,并从你的按钮点击事件中调用程序名称以防止歧义,我已经改变了一些声明的名称,因为它们混淆了目的:

Sub ImInAModule()

Dim i As Long, Sheet1Last As Long, Sheet2Last As Long

Dim compare As Variant

Dim origBook As Workbook

Dim checkBook As Workbook

Set origBook = ActiveWorkbook

origBook.Sheets(1).Range("A:A").ClearFormats

Set checkBook = Workbooks.Open("C:\Users\ZAGLIZ\Documents\Classeur1.xltm")

Sheet1Last = origBook.Sheets(1).Range("A65536").End(xlUp).Row

Sheet2Last = checkBook.Sheets(1).Range("A65536").End(xlUp).Row

For i = 2 To Sheet1Last

compare = Application.Match(origBook.Sheets(1).Range("A" & i), checkBook.Sheets(1).Range("A2:A" & Sheet2Last), 0)

    If IsError(compare) Then
UserForm1.ListBox1.AddItem "Libellé : " & origBook.Sheets(1).Range("A" & i) & " du montant " & origBook.Sheets(1).Range("C" & i) & " est ajouté !"

    End If
Next i

UserForm1.Show

End Sub