Excel VBA跨工作表选择性粘贴值的代码重构问题求助
VBA代码重构方案
你当前的代码可以通过直接赋值单元格值的方式优化,完全不需要调用剪贴板的复制粘贴操作,既可以把原来两行的复制粘贴操作合并为一行,运行效率也更高,不会影响你本地剪贴板的原有内容。
重构后代码
Private Sub Worksheet_Activate() Dim fbfRow As Long Dim fbflastRow As Long Dim fbfnextRow As Long Dim fbfwksSource As Worksheet Dim fbfwksTarget As Worksheet Set fbfwksSource = Worksheets("Flow Based Fixtures") Set fbfwksTarget = Worksheets("Report") fbflastRow = fbfwksSource.Range("A" & fbfwksSource.Rows.Count).End(xlUp).Row fbfnextRow = 8 With fbfwksSource For fbfRow = 4 To fbflastRow ' 直接赋值替代复制粘贴,一行完成原来两行的操作 fbfwksTarget.Range(fbfwksTarget.Cells(fbfnextRow, 1), fbfwksTarget.Cells(fbfnextRow, 6)).Value = .Range(.Cells(fbfRow, 1), .Cells(fbfRow, 6)).Value fbfwksTarget.Cells(fbfnextRow, 11).Value = .Cells(fbfRow, 7).Value fbfwksTarget.Cells(fbfnextRow, 12).Value = .Cells(fbfRow, 8).Value fbfwksTarget.Cells(fbfnextRow, 13).Value = .Cells(fbfRow, 14).Value fbfnextRow = fbfnextRow + 1 Next fbfRow End With End Sub
改动说明
- 移除了所有
Copy、PasteSpecial操作,改为直接给目标区域的Value属性赋值,单条语句即可完成值的传递,不需要额外调用剪贴板 - 清理了原代码中声明但从未使用的vbf系列变量,减少代码冗余
- 如果后续需要迁移格式、公式等其他内容,再按需调整
PasteSpecial的参数即可,仅传递值的场景直接赋值是最优方案
内容的提问来源于stack exchange,提问作者sixman
相关产品推荐
相关产品推荐

