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

如何修改VBA宏使其在工作簿所有工作表中重复执行?

修改VBA宏以遍历所有工作表执行操作

你这段代码虽然写了For Each ws In Worksheets循环,但所有操作都依赖Select、Selection和Application.Goto,这些方法默认作用于当前激活的工作表,完全没和循环里的ws对象关联,所以才会只在同一个表重复执行。

下面是修正后的代码,核心是直接通过ws对象绑定工作表操作,全程不用选单元格,既高效又能确保每个工作表都被正确处理:

Sub Macro1()
    Dim ws As Worksheet
    
    ' 遍历工作簿内所有工作表
    For Each ws In Worksheets
        With ws
            ' 取消当前工作表所有单元格的合并(直接操作,无需选中)
            .Cells.UnMerge
            
            ' 删除原D列和E列:注意删完D列后,原E列会变成新的D列,所以连续删两次D列
            .Columns("D:D").Delete Shift:=xlToLeft
            .Columns("D:D").Delete Shift:=xlToLeft
            
            ' 定位J10,选中从J10到最右、最下的区域对应的整列并删除
            Dim targetColumns As Range
            Set targetColumns = .Range("J10", .Range("J10").End(xlToRight)).End(xlDown).EntireColumn
            targetColumns.Delete
        End With
    Next ws
End Sub

关键修改点说明:

  • 去掉所有Select/Selection操作,直接通过ws.前缀指定操作对象,确保代码作用在当前循环的工作表上
  • 修正了删除列的逻辑:原代码删完D列再删E列会出错,因为删除D列后原E列自动左移成为新的D列,所以连续删两次D列才是正确的
  • 用With ws简化代码,所有.开头的操作都指向当前循环的工作表,避免重复写ws.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:12:11