Как вставить код VBA в закрытый макрос для командной кнопки - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть код, который включает копирование данных столбца из источника и вставку в новую книгу. Когда я запускаю этот код через активную командную кнопку x на листе на листе, подобном этому , я получаю ошибку времени выполнения. Мне сказали создать закрытый модуль для листа и скопировать туда код вставки. в таком модуле

Но когда я сохраняю его и нажимаю активную кнопку x на листе, ничего не происходит. Если я go выведу окно ошибки и нажму F5 или F8, оно будет работать отлично. В чем моя ошибка? Как сделать так, чтобы код внутри модуля прикреплялся к кнопке команды?

Вот мой код:

Dim lastrow As Long
Dim wksSource As Worksheet, wksDest As Worksheet
Dim source1 As Range, target1 As Range, source2 As Range
Dim target2 As Range

Workbooks.Open Filename:="C:\Users\catia\Downloads\Raw Data.xlsx"

Set wksSource = Workbooks("2020 Tracker.xlsm").Worksheets("Sheet3")
Set wksDest = Workbooks("Raw Data.xlsx").Worksheets("Sheet1")

lastrow = wksSource.Cells(Rows.Count, 1).End(xlUp).row

Workbooks("Raw Data.xlsx").Worksheets("Sheet1").Rows("3:" & Rows.Count).ClearContents

Set source1 = wksSource.Range("A2:A" & lastrow)
Set source2 = wksSource.Range("C2:C" & lastrow)

Set target1 = wksDest.Range(Range("B3"), Range("B3").End(xlDown))
Set target2 = wksDest.Range(Range("E3"), Range("E3").End(xlDown))

source1.Copy: target1.PasteSpecial Paste:=xlPasteValues
source2.Copy: target2.PasteSpecial Paste:=xlPasteValues

wksDest.Range("A2").Select
Workbooks("Raw Data.xlsx").Save
Workbooks("Raw Data.xlsx").Close

1 Ответ

0 голосов
/ 08 апреля 2020

Вы должны квалифицировать свои Range звонки с рабочим листом, на котором они находятся.

Изменить

Set target1 = wksDest.Range(Range("B3"), Range("B3").End(xlDown))
Set target2 = wksDest.Range(Range("E3"), Range("E3").End(xlDown))

на

Set target1 = wksDest.Range(wksDest.Range("B3"), wksDest.Range("B3").End(xlDown))
Set target2 = wksDest.Range(wksDest.Range("E3"), wksDest.Range("E3").End(xlDown))

Или With...End With block:

With wksDest
    Set target1 = .Range(.Range("B3"), .Range("B3").End(xlDown))
    Set target2 = .Range(.Range("E3"), .Range("E3").End(xlDown))
End With

Или, так как вы вставляете специальное, вы можете просто оставить target1 и target2 в качестве первой ячейки диапазона:

Set target1 = wksDest.Range("B3")
Set target2 = wksDest.Range("E3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...