在其他文件中的条件之后复制VBA

时间:2019-03-01 07:40:45

标签: excel vba

我必须在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

1 个答案:

答案 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