我想使用一个VBA代码,我可以为工作簿中的所有工作表运行,以按以下顺序调整列的大小:
1。)首先,将所有工作表中的所有列调整为宽度10
2。)其次,识别任何TEXT比NUMBERS更多的列并自动调整列以适应内容。
更改的目的是为我们的财务报告提供标准列宽布局,并通过Hyperion Smart View在Excel中填充。所有单元格在Excel中格式化为“自定义”,无法更改。报告数据(实际数字)可以从spreadhseet中的任何行开始,因为列标题有时需要3到10行(可能更多)。我们有很多蝴蝶报告(中间的维度'比如列c',在该列的左侧和右侧有事实(数字))。在某些情况下,A列中标题为“Actuals”的列可能在同一列中具有进一步向下(第50行)的子标题“Revenue”。因此,可以公平地说,列中没有数字和文本的混合而没有设定规则。
请帮助完成上述操作或建议任何替代方法,以确保数字列的宽度相同(10),文本列为“自动调整”。
到目前为止,我有以下内容,它将所有列宽更新为10,然后手动识别工作表BM03和BM10中的AutoFit列:
Sub Run_Me_To_Fix_Columns()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Call resizingColumns(ws)
If ws.name = "BM03a EBIT Report (Summary & De" Then
ws.Columns("I:I").EntireColumn.Autofit
ElseIf ws.name = "BM10 Balance Sheet" Then
ws.Columns("A:A").EntireColumn.Autofit
End If
Next
End Sub
Sub resizingColumns(ws As Worksheet)
With ws
.Range("A:X").ColumnWidth = 10
End With
End Sub
答案 0 :(得分:2)
您可以尝试评估每个工作表中的每一列,并将文本单元格的数量与数字单元格的数量进行比较。然后格式化以自动生成那些文本多于数字的文本。
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Call resizingColumns(ws)
' If ws.Name = "BM03a EBIT Report (Summary & De" Then
' ws.Columns("I:I").EntireColumn.AutoFit
'
' ElseIf ws.Name = "BM10 Balance Sheet" Then
' ws.Columns("A:A").EntireColumn.AutoFit
'
' End If
Next
End Sub
Sub resizingColumns(ws As Worksheet)
With ws
.Range("A:X").ColumnWidth = 10
End With
For i = 1 To 24
Numbers = WorksheetFunction.Count(ws.Columns(i))
Text = WorksheetFunction.CountA(ws.Columns(i)) - Numbers
If Numbers < Text Then
ws.Columns(i).EntireColumn.AutoFit
End If
Next i
ws.Range("A1").Select
End Sub