Копия VBA после Критериев в другом файле - PullRequest
0 голосов
/ 01 марта 2019

Я должен скопировать после 3 столбца, для 3 региона - которые имеют X в строках, если моя информация относится к NAFTA, Европе и Азии. Информация должна быть скопирована из файла MasterDate -MacroMaster в Prices_Database_ For_ Volume_Europe. Я создаю следующий коддля Европы, но не работают и не генерируют никаких ошибок. Пожалуйста, сообщите.

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 голосов
/ 01 марта 2019

Я думаю, что ваш цикл 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.

Также, при работе с различными рабочими листами / книгами, я бы предложил использовать wsCopy.Cells(i, 11) и т. Д. В вашем операторе ifесли это лист, который вы просматриваете, потому что, если ваша другая рабочая книга каким-то образом активирована, она может смотреть не на ту рабочую книгу.

Также я не вижу, что делает цикл for, потому что каждый раз, когда выНайдите строку, где столбец K - это «EU», а другая ячейка - «x» (что странно, потому что вы используете последнюю переменную строки в качестве номера столбца), и вы копируете весь диапазон в нижнюю часть листа назначения.Кажется более логичным, что вам нужно копировать только 1 строку здесь.В этом случае вы должны использовать

wsCopy.Range("A" & i & ":AB" & i).Copy wsDest.Range("A" & lDestLastRow)

Наконец, когда вы обрабатываете большое количество строк, я бы предложил вообще не использовать Copy / Paste, так как это довольно медленно.Вы также можете сказать:

wsDest.Range("A" & lDestLastRow & ":AB" & lDestLastRow).Value = wsCopy.Range("A" & i & ":AB" & i).Value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...