如何在私有宏中将VBA代码插入命令按钮

时间:2020-04-07 23:16:38

标签: excel vba

我有一个代码,涉及从源复制列数据并粘贴到新工作簿中。当我通过in sheet like this工作表中的活动x命令按钮运行此代码时,出现运行时错误。有人告诉我为工作表创建专用模块,然后在其中复制粘贴代码。 in module like this

但是当我保存它并单击工作表上的活动x按钮时,没有任何反应。如果我去调试窗口并按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 :(得分:0)

您需要使用其工作表来对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块:

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

或者,由于要粘贴特殊字符,因此可以仅将target1target2保留为范围的第一个单元格:

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