【问题标题】:Change a range of column width repeatedly (VBA Excel)重复更改列宽范围(VBA Excel)
【发布时间】:2021-05-03 09:01:46
【问题描述】:

我想更改一系列列的列宽,然后循环命令。例如,更改 col"B" ~ col"N" 的列宽,然后重复该过程直到最后一列有数据。 (我不想自动调整范围内的第一列)

但是,下面的命令不起作用,因为列范围设置不正确。我尝试使用 Range(Cells(1, 2), Cells(, colSize) 但这也不起作用。

Dim j As Integer
Dim colSize As Integer
colSize = 14

For j = 2 To Columns.Count Step colSize
Range(Columns(j), Columns(j + colSize - 1)).ColumnWidth.AutoFit
Next j

谢谢。

【问题讨论】:

  • AutoFit 是 Range 对象的方法,而不是 ColumndWidth 对象的方法。见AutoFit。所以试试Range(Columns(j), Columns(j + colSize - 1)).AutoFit。此外,您不需要循环 - 您正在使用该语句更改所有列。循环将一直向右遍历整个工作表 - Columns.Count = 16384,当您尝试调整工作表的列的宽度时,最后 14 个将失败。
  • 感谢您的评论。是的,Autofit 可以在没有 ColumnWidth 的情况下工作!我尝试了不同的方法,但事情变得一团糟......我循环的原因是因为我想避免自动调整每个 14 列块的第一列。但我意识到,在第一次自动调整列之后更容易调整。

标签: excel vba loops range column-width


【解决方案1】:

也许不用循环,你可以简单地使用Union 方法

     Application.Union(Columns("A:B"), Columns("D:L"), Columns("AA"), Columns("AC:AD"), Columns("AI:AJ"), Columns("AR"), Columns("AT"), Columns("BA"), Columns("BI"), Columns("BM")).Select
     Selection.ColumnWidth = 8

上面的例子来自工作表,其中包括从A到CB之类的工作表。

您可以选择您需要的列(不一定按正确的顺序),然​​后设置它们的宽度。

【讨论】:

  • 谢谢。我不想指定特定的列字符,AA AA 等等,因为列很长。
【解决方案2】:

为了在一定范围内更改列的宽度(这里,14 列作为一个块,并且希望自动调整块中的每个 2nd col ~ 13th col),以下工作。但是自动调整似乎需要一些时间,因此,指定列宽可能会更好。

Sub ColumnWidthChange()

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim colSize As Integer 'a block size
colSize = 14


For j = 2 To Columns.Count Step colSize
Range(Columns(j), Columns(colSize)).ColumnWidth = 11  'Range.AutoFit works but may take longer
Next j

'a space column in between blocks 
For i = colSize To Columns.Count Step colSize
Columns(i).ColumnWidth = 1
Next i

'the first column of each block
For k = 1 To Columns.Count Step colSize
Columns(k).ColumnWidth = 12
Next k

结束子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2015-07-18
    • 2020-03-02
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多