比较两个单独的文件VBA

时间:2013-05-02 10:43:47

标签: excel vba loops excel-vba

所以我想要做的是在Workbook A中有一个打开Workbook B和C的宏。然后它通过Workbooks B和C的A列,并且两个值相等,它从工作簿C和将其粘贴到工作簿A的A列中。

我已经编写了下面的代码,但是你觉得用另一种方式做起来更容易,请随意编写自己的代码。谢谢,请帮助我:))

Sub ReportCompareAlta()
'
' ReportCompareAlta Macro
' Adds instances where column D is "ALTA"

    Dim varSheetA As Variant
    Dim varSheetB As Variant
    Dim varSheetC As Variant
    Dim StrValue As Variant
    Dim strRangeToCheck As String
    Dim iRow As Long
    Dim iCol As Long
    Dim WbkA As Workbook
    Dim WbkB As Workbook
    Dim WbkC As Workbook
    Dim counter As Long

    Set WbkA = Workbooks.Open(Filename:="G:\Reporting\AH_MISSE_FEB2013.xls")
    Set WbkB = Workbooks.Open(Filename:="G:\Reporting\AH_MISSE_MAR2013.xls")
    Set WbkC = Workbooks.Open(Filename:="G:\Reporting\ReportCompare.xls")
    Set varSheetA = WbkA.Worksheets("LocalesMallContratos")
    Set varSheetB = WbkB.Worksheets("LocalesMallContratos")
    Set varSheetC = WbkC.Worksheets("Sheet1")


    strRangeToCheck = "A1:IV65536"

    Debug.Print Now
    varSheetA = WbkC.Worksheets("Sheet2").Range(strRangeToCheck) 'may be confusing code here
    varSheetB = WbkC.Worksheets("Sheet3").Range(strRangeToCheck) 'may be confusing code here
    Debug.Print Now

    counter = 0

    For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)        
            If varSheetB(iRow, "B") = varSheetA(iRow, "B") & varSheetB(iRow, "B") <> "GERENCIA" & varSheetB(iRow, "B").Value <> "" & varSheetB(iRow, "D") = "ALTA" Then
                StrValue = ""
                varSheetB.Range("iRow:B").Select 
                Selection = StrValue
                ActiveSheet = varSheetC
                Range("A1").Select
                Selection.Offset(counter, 0).Value = StrValue
                counter = counter - 1

            Else
                MsgBox ("Done")
            End If         
    Next iRow

End Sub

2 个答案:

答案 0 :(得分:2)

您需要使用“AND”一词而不是“&amp;”代码中的符号。使用'&amp;'只是连接值,这将导致你的if语句失败。

答案 1 :(得分:1)

我发现Mat Richardson指出一些明显的错误,使用&并不等同于AND运算符的简写,它是一个连接符,当你说:< / p>

If varSheetB(iRow, "B") = varSheetA(iRow, "B") & varSheetB(iRow, "B") <> "GERENCIA" & varSheetB(iRow, "B").Value <> "" & varSheetB(iRow, "D") = "ALTA" Then

这让我想到另一个错误:

varSheetB(和A和C)就是Variant / Array变量。您无法通过iRow, "B"对这些进行索引,因为您无法使用非数字索引。也许你的意思是(iRow, 2)。

在相关说明中:varSheetB.Range("iRow:B").Select这也会失败,因为你不能.Select变种。这是 Range变量。此外,iRow:B对于Variant数组的 或Range变量不正确。此外,此时,varSheetB不再是Worksheet对象变量。

这可能会给我带来最大的错误:您使用变量varSheetAvarSheetBvarSheetC来表示(在此代码中的不同时间){{1和一个Variant数组值。这很令人困惑,可能会导致上述错误。变量不能同时属于这两种情况,因此您需要在变体时将变体视为变体,并在工作表时更好地处理工作表,或者更好:将工作表变量用于数组的工作表和变体,不要将同一个变量用于多种用途。

Worksheet Object