能否精简Excel列宽调整VBA代码,减少With/End With语句?
精简VBA代码减少With语句的方案
当然可以精简代码,核心思路是减少重复的对象引用,同时保留代码的可读性。以下是几种可行的方案:
方案1:嵌套With减少工作表重复引用
将整个工作表用一个With包裹,内部处理不同列区域,避免重复调用ThisWorkbook.Worksheets("TestSheet1"):
With ThisWorkbook.Worksheets("TestSheet1") With .Columns("A:C") .AutoFit .ColumnWidth = .ColumnWidth + 2 End With With .Columns("D:G") .AutoFit .ColumnWidth = .ColumnWidth + 1 End With End With
方案2:移除内部With,直接链式调用
如果想彻底减少With语句,可以直接重复列区域引用(牺牲一点性能但代码更紧凑):
With ThisWorkbook.Worksheets("TestSheet1") .Columns("A:C").AutoFit .Columns("A:C").ColumnWidth = .Columns("A:C").ColumnWidth + 2 .Columns("D:G").AutoFit .Columns("D:G").ColumnWidth = .Columns("D:G").ColumnWidth + 1 End With
方案3:封装为子过程,极致精简且复用
如果后续需要调整更多列,推荐将列调整逻辑封装为独立子过程,主代码会非常简洁:
Sub AdjustSheetColumns() Dim targetWs As Worksheet Set targetWs = ThisWorkbook.Worksheets("TestSheet1") ' 调用封装的子过程处理不同列 AdjustColumn targetWs.Columns("A:C"), 2 AdjustColumn targetWs.Columns("D:G"), 1 End Sub ' 封装列自动调整+增量的逻辑 Sub AdjustColumn(colRange As Range, widthIncrement As Double) With colRange .AutoFit .ColumnWidth = .ColumnWidth + widthIncrement End With End Sub
以上方案都减少了不必要的独立With语句,同时保证代码清晰易维护。
内容的提问来源于stack exchange,提问作者user2303407
相关产品推荐
相关产品推荐

