You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA宏求助:实现仅复制单元格值至新文档

修改建议:仅复制单元格值的VBA宏调整

你的代码里有两处复制操作,其中第二处循环内的复制逻辑直接使用Copy方法,会保留源单元格的公式。同时,针对筛选后的可见行,也可以优化获取方式,避免不必要的循环判断。以下是修改后的代码:

Sub TestThat()
    Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Estimated Bill of Materials")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Copyable ROM")
    Dim sourceRange As Range: Set sourceRange = ws1.Range("B2:C7")
    Dim targetRow As Long
    Dim visibleRows As Range, rw As Range
    
    ' 复制B2:C7区域的值
    ws2.Visible = xlSheetVisible
    sourceRange.Copy
    ws2.Range("B2").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    
    ' 清空目标区域
    ws2.Range("B12:J100").Clear
    
    ' 处理筛选后的可见行(第12行及以下,第1-7列)
    Set visibleRows = ws1.Range("A12:G" & ws1.Range("B100").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    
    For Each rw In visibleRows.Rows
        targetRow = ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row + 1
        ' 仅复制值到目标行
        ws2.Range("A" & targetRow & ":G" & targetRow).Value = rw.Value
    Next rw
    
    ' 复制工作表到新工作簿
    ws2.Copy
    ws2.Visible = xlSheetHidden
End Sub

关键修改点:

  • 循环内的复制逻辑:替换原有的Copy方法,直接通过.Value = rw.Value赋值的方式仅复制单元格值,彻底避免公式被复制。
  • 筛选可见行的获取:使用SpecialCells(xlCellTypeVisible)直接获取筛选后的可见行,替代原有的循环判断第9列是否为*,更贴合“筛选后可见内容”的需求(如果原判断逻辑是业务需要,可保留循环,但复制部分仍需改成赋值方式)。
  • 取消不必要的Activate/Select:VBA代码应尽量避免使用Activate和Select,直接通过工作表对象引用单元格,提升代码稳定性和效率。

内容的提问来源于stack exchange,提问作者Zachary Naylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:47:38