我正在使用 Excel for Microsoft 365。
在第一个工作表上,我录制了一个宏来调整列宽和行高。然后我切换到第二个工作表并运行这个宏,并意识到我遇到了下面描述的问题。
每个工作表至少包含一个(可能是多个)列,其标题行(第 1 行)中的列名称包含字符串“foo”。这些列的位置因工作表而异。
我对所有列执行一些步骤。这些步骤效果很好。但是,我想对“foo”列执行一个额外的步骤。具体来说,我想将这些列的宽度更改为 30。由于这些列的位置因工作表而异,因此这并不是那么容易做到的。
下面是说明问题的 VBA 代码:
Sub Macro1()
' This part works.
Application.Goto Reference:="R1C1"
Cells.Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("A:A").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.ColumnWidth = 100
Cells.Select
Cells.EntireRow.AutoFit
Cells.EntireColumn.AutoFit
' The problem starts here.
' How may I do this for all columns whose column name in the header row contains "foo"?
' There are an arbitrary number of such columns and their locations vary from worksheet to worksheet.
Columns("G:G").Select
Selection.ColumnWidth = 30
Columns("L:L").Select
Selection.ColumnWidth = 30
' The rest of this macro works fine.
Cells.Select
Cells.EntireRow.AutoFit
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
End Sub
在此代码中,我将列 G 和 L 设置为宽度 30。我如何更改此代码以将列名(在标题行中)包含“foo”的任何列的宽度设置为 30,而不是对列进行硬编码?
您可以迭代所有列,并检查顶行是否包含“foo”: