如何修改VBA脚本的Range范围设置 预设单元格范围自动取消合并
问题原因
你修改后的脚本无法生效主要有两个问题:
- 缺少
WorkRng变量的显式声明,VBA未开启强制变量声明时可能出现变量识别异常 - 没有明确指定Range所属的工作表,默认会指向运行时激活的工作表,若激活表非目标表就不会有预期效果
修正后的可用脚本
根据你不同的预设范围需求,可选择对应版本:
场景1:固定处理当前工作表第1-8行
Sub UnMergeSameCell() Dim Rng As Range, WorkRng As Range ' 明确指定处理当前工作表的第1到8行 Set WorkRng = ThisWorkbook.ActiveSheet.Range("1:8") Application.ScreenUpdating = False Application.DisplayAlerts = False For Each Rng In WorkRng If Rng.MergeCells Then With Rng.MergeArea .UnMerge .Formula = Rng.Formula End With End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
场景2:自动处理当前工作表所有已使用的单元格(通用推荐,无需手动指定行号列号)
Sub UnMergeSameCell() Dim Rng As Range, WorkRng As Range ' 自动获取当前工作表所有已使用的区域作为处理范围 Set WorkRng = ThisWorkbook.ActiveSheet.UsedRange Application.ScreenUpdating = False Application.DisplayAlerts = False For Each Rng In WorkRng If Rng.MergeCells Then With Rng.MergeArea .UnMerge .Formula = Rng.Formula End With End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
场景3:处理当前工作表所有单元格(全表范围)
Sub UnMergeSameCell() Dim Rng As Range, WorkRng As Range ' 选中当前工作表全部单元格作为处理范围 Set WorkRng = ThisWorkbook.ActiveSheet.Cells Application.ScreenUpdating = False Application.DisplayAlerts = False For Each Rng In WorkRng If Rng.MergeCells Then With Rng.MergeArea .UnMerge .Formula = Rng.Formula End With End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
如果需要指定特定工作表而非当前激活的工作表,把代码中的ActiveSheet改成Sheets("你的目标工作表名称")即可,例如Set WorkRng = ThisWorkbook.Sheets("数据汇总表").UsedRange。
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

