所以我想要做的是在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
答案 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
对象变量。
这可能会给我带来最大的错误:您使用变量varSheetA
,varSheetB
和varSheetC
来表示(在此代码中的不同时间){{1和一个Variant数组值。这很令人困惑,可能会导致上述错误。变量不能同时属于这两种情况,因此您需要在变体时将变体视为变体,并在工作表时更好地处理工作表,或者更好:将工作表变量用于数组的工作表和变体,不要将同一个变量用于多种用途。
Worksheet Object