jhovyn Ответов: 2

Vba-почему excel закрывается при запуске этого кода для копирования / вставки данных на несколько листов?


Добрый День!У меня есть это ниже кода VBA, который я пытаюсь скопировать данные из нескольких книг (XLSX и XLSM) и вставить их на несколько листов в мой мастер-файл. Проблема в том, что когда я выполняю код VBA, мой excel внезапно останавливается и выходит. См. мой код ниже. Спасибо!

Что я уже пробовал:

Public Sub Data()
Dim wbk As Workbook
Dim Filename As String
Dim Path As String
Dim sht, msht As Worksheet
Dim lRowFile, lRowMaster As Long
Dim FirstDataSet As Integer

On Error Resume Next

Path = "C:\Users\VBA\"
FirstDataSet = 2 'First Data Set in File

'First Workbook  
Filename = "Brand1.xlsx"

Set wbk = Workbooks.Open(Path & Filename)
Set sht = Workbooks(Filename).Worksheets("Raw") 'First Sheet in File
Set msht = ThisWorkbook.Worksheets("msh_Brand1") 'First Sheet in Master

lrF = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 'Last Row in File
lRM = msht.Cells(Rows.Count, 2).End(xlUp).Row 'Last Row in Master

For i = FirstDataSet To lrF
    lRM = msht.Cells(Rows.Count, 2).End(xlUp).Row 'Last Row in Master
    msht.Range("B" & lRM + 1).Value = sht.Range("A" & i).Value 'ID
    msht.Range("C" & lRM + 1).Value = sht.Range("B" & i).Value 'Name
    msht.Range("E" & lRM + 1).Value = sht.Range("C" & i).Value 'Store
    msht.Range("F" & lRM + 1).Value = sht.Range("D" & i).Value 'Product Code
    msht.Range("I" & lRM + 1).Value = sht.Range("F" & i).Value 'Brand
    msht.Range("J" & lRM + 1).Value = sht.Range("G" & i).Value 'Form
    msht.Range("K" & lRM + 1).Value = sht.Range("H" & i).Value 'Days
    msht.Range("L" & lRM + 1).Value = sht.Range("I" & i).Value 'Category
Next
    sht.Range("K2:AZZ" & lrF).Copy _
Destination:=msht.Range("M2")
wbk.Close True

'Second Workbook
Filename = "Brand2.xlsm"

Set wbk = Workbooks.Open(Path & Filename)
Set sht = Workbooks(Filename).Worksheets("Raw") 'First Sheet in File
Set msht = ThisWorkbook.Worksheets("msh_Brand2") 'Second Sheet in Master

lrF = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 'Last Row in File
lRM = msht.Cells(Rows.Count, 2).End(xlUp).Row 'Last Row in Master

For i = FirstDataSet To lrF
    lRM = msht.Cells(Rows.Count, 2).End(xlUp).Row 'Last Row in Master
    msht.Range("A" & lRM + 1).Value = sht.Range("B" & i).Value 'ID
    msht.Range("G" & lRM + 1).Value = sht.Range("A" & i).Value 'Name
Next
    sht.Range("C2:AZZ" & lrF).Copy _
Destination:=msht.Range("N2")
wbk.Close True

End Sub

2 Ответов

Рейтинг:
2

Member 1403302

Попробуйте отладить этот код в редакторе Excel vba.
Откройте excel. Нажмите Alt + F11.откроется редактор vba. Вставьте свой код в эту рабочую книгу. Чтобы выполнить код, поместите курсор в этот sub и нажмите F8.

Ваш макрос должен быть изменен (включен) для запуска макроса в excel. Если путь и пример файла существуют, вы не столкнетесь с какой-либо проблемой.


jhovyn

Когда я пытаюсь отладить, это показывает, что моя первая рабочая книга "Brand1.xlsx" успешно копирует данные и вставляет их в мастер-файл листа "msh_Brand1", но моя другая рабочая книга" Brand2.xlsm " - нет. Кто-нибудь поможет?

Рейтинг:
0

Member 1403302

Убедитесь, что рабочий лист с указанным вами именем доступен в рабочей книге, а диапазон данных содержит правильные данные. Вместо того чтобы запускать код в цикле, сначала попробуйте скопировать и вставить одно конкретное значение ячейки. (После копирования значения ячейки из кода просто сделайте вставку в приложении Блокнот. Если данные будут скопированы, он вставит их в блокнот) Если это работает, то скопируйте и вставьте в петли также должны работать. Ваше значение ячейки (диапазон) должно быть правильным в коде.


CHill60

Предлагая альтернативы оригинальному решению, лучше всего использовать виджет" улучшить решение " для обновления вашего решения, а не публиковать новое. Таким образом, все ваши вещи держатся вместе, и вам легче следовать за нитью вашего мышления. В качестве альтернативы ответьте на комментарий ОП, а не публикуйте несколько решений (которые сбивают с толку всех)

Member 1403302

Спасибо. Это первый раз, когда я опубликовал решение, и я не заметил опции ответа.

CHill60

Добро пожаловать в мир качества :-)