Excel VBA中如何用活动工作表动态引用替代工作表名称(如Sheet16)
修改后的VBA代码
Sub Macro1() Dim wsOriginal As Worksheet ' 保存最初的活动工作表引用,避免新建sheet后ActiveSheet指向变化 Set wsOriginal = ActiveSheet ' 复制原活动表内容到新工作表 wsOriginal.Cells.Copy Sheets.Add After:=wsOriginal ActiveSheet.Paste Application.CutCopyMode = False ' 给原活动表添加自动筛选 wsOriginal.UsedRange.AutoFilter ' 在原活动表上设置筛选排序规则并应用 wsOriginal.AutoFilter.Sort.SortFields.Clear wsOriginal.AutoFilter.Sort.SortFields.Add2 Key:= _ wsOriginal.Range("M1:M12"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _ :=xlSortNormal With wsOriginal.AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
关键修改说明
- 新增变量
wsOriginal固定最初的活动工作表:新建工作表后ActiveSheet会自动切换到新表,用变量可以确保后续操作始终指向你一开始选中的工作表。 - 替换所有
ActiveWorkbook.Worksheets("Sheet16")为wsOriginal:彻底把固定表引用改成活动表引用。 - 限定单元格区域为原活动表:把
Range("M1:M12")改为wsOriginal.Range("M1:M12"),避免因当前活动表变化导致引用错误区域。 - 移除冗余的
Select和Selection:直接通过工作表对象操作,提升代码运行效率和稳定性。
内容的提问来源于stack exchange,提问作者Jo el
相关产品推荐
相关产品推荐

