我有一个代码,涉及从源复制列数据并粘贴到新工作簿中。当我通过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
答案 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
或者,由于要粘贴特殊字符,因此可以仅将target1
和target2
保留为范围的第一个单元格:
Set target1 = wksDest.Range("B3")
Set target2 = wksDest.Range("E3")