我正在使用 Microsoft 365 版 Excel。
在第一个工作表上,我录制了一个宏来调整列宽和行高。然后我切换到第二个工作表并运行此宏,发现我遇到了下面描述的问题。
每个工作表至少包含一个(可能多个)列,其标题行(第 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?
答案1
您可以遍历所有列,并检查顶行是否包含“foo”:
For Each myColumn In ActiveSheet.Columns
If InStr(1, LCase(myColumn.Cells(1, 1)), "foo") <> 0 Then
myColumn.ColumnWidth = 30
End If
Next