Estou usando o Excel para Microsoft 365.
Na primeira planilha, gravei uma macro para ajustar as larguras das colunas e as alturas das linhas. Em seguida, mudei para a segunda planilha e executei essa macro e percebi que tenho o problema descrito abaixo.
Cada planilha contém pelo menos uma (talvez várias) colunas cujo nome da coluna na linha do cabeçalho (linha 1) contém a string "foo". As localizações dessas colunas variam de planilha para planilha.
Existem algumas etapas que executo em todas as colunas. Essas etapas funcionam bem. No entanto, há uma etapa extra que gostaria de executar na(s) coluna(s) "foo". Especificamente, gostaria de alterar a largura dessas colunas para 30. Como os locais dessas colunas variam de planilha para planilha, isso não é tão simples de fazer.
Aqui está o código VBA que ilustra o problema:
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
Neste código, defino as colunas G e L para ter largura 30. Em vez de codificar as colunas, como posso alterar este código para definir a largura para 30 de qualquer coluna cujo nome da coluna (na linha do cabeçalho) contenha "foo"?
Você pode iterar em todas as colunas e verificar se a linha superior contém "foo":