繁体   English   中英

如何在私有宏中插入 vba 代码到命令按钮

[英]How to insert a vba code in private macro to command button

我有一个代码,它涉及从源复制列数据并粘贴到新工作簿中。 当我像这样通过工作表中的活动 x 命令按钮运行此代码时,出现运行时错误。 有人告诉我为工作表创建私有模块并在那里复制粘贴代码。 在这样的模块中

但是当我保存它并单击工作表上的活动 x 按钮时,没有任何反应。 如果我用 go 调试 window 并按 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

您需要使用它们所在的工作表来限定您的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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM