我必须在3列之后复制3个区域-如果我的信息用于NAFTA,欧洲和亚洲,则在行上带有X.该信息应从MasterDate -MacroMaster文件复制到Price_Database_ For_ Volume_Europe.I创建以下代码在欧洲,但不起作用,也不会产生任何错误。请告知。
Sub Copy_Data_From_Macro_FileinDB() ' copy data from Macro file to DB file
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
Dim i As Integer
For i = 2 To lCopyLastRow
If Cells(i, 11) = "EU" And Cells(i, lCopyLastRow) = “x” Then
Set wsCopy = Workbooks("MacroMaster file.xlsm").Sheets("MasterData")
Set wsDest = Workbooks("Prices_Database_ For_
Volume_Europe.xlsx").Sheets("MasterData")
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
wsCopy.Range("A2:AB" & lCopyLastRow).Copy _
wsDest.Range("A" & lDestLastRow)
Workbooks("Prices_Database_ For_ Volume_Europe.xlsx").Close
SaveChanges:=True
Workbooks("MacroMaster
file.xlsm").Worksheets("MasterData").Range("A2:AB100").ClearContents
End If
Next i
End Sub
答案 0 :(得分:0)
我认为您的for循环无法正常工作,因为您在定义之前在其中使用了lCopyLastRow
。您应该放置此位:
Set wsCopy = Workbooks("MacroMaster file.xlsm").Sheets("MasterData")
Set wsDest = Workbooks("Prices_Database_ For_
Volume_Europe.xlsx").Sheets("MasterData")
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
for循环之外。
另外,当使用不同的工作表/工作簿时,如果要查找的是工作表,我建议在if语句中使用wsCopy.Cells(i, 11)
等,因为如果您以其他方式激活了其他工作簿,则可能会查看错误的工作簿。
我也不真正了解for循环的作用,因为每次您找到一行,其中K列为“ EU”,另一个单元格为“ x”(这很奇怪,因为您使用的是最后一行)变量(作为列号),则将整个范围复制到目标工作表的底部。在这里您一次只需要复制1行似乎更合乎逻辑。在这种情况下,您应该使用
wsCopy.Range("A" & i & ":AB" & i).Copy wsDest.Range("A" & lDestLastRow)
最后,当您处理大量的行时,我建议完全不要使用“复制/粘贴”,因为它非常慢。您还可以说:
wsDest.Range("A" & lDestLastRow & ":AB" & lDestLastRow).Value = wsCopy.Range("A" & i & ":AB" & i).Value