我有一张3张工作簿。我想使用VBA格式化每张工作表(设置字体大小,自动调整列,排序)。我找到了一段代码来遍历表单:
Sub wsLoop()
' Declare Current as a worksheet object variable.
Dim ws As Worksheet
' Loop through all of the worksheets in the active workbook.
For Each ws In ActiveWorkbook.Worksheets
'Code here
Next ws
End Sub
原始代码包含一个弹出工作表名称的消息框。当插入用于格式化的代码时,我记录了一个宏,循环只格式化了第一张表格。我一直在寻找,但我找不到一个简单的例子。我不应该能够进入:
Cells.Select
With Selection.Font
.Name = "Calibri"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
为什么这只会格式化第一张?
答案 0 :(得分:1)
Cells.Select
选择当前活动工作表的单元格。此选择在For Each
循环
您希望处理For Each
构造提供的工作表的单元格,即
Sub wsLoop()
' Declare Current as a worksheet object variable.
Dim ws As Worksheet
' Loop through all of the worksheets in the active workbook.
For Each ws In ActiveWorkbook.Worksheets
' format font of currently looped worksheet object feferenced by WS
With ws.Cells.Font
.Name = "Calibri"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Next ws
End Sub
答案 1 :(得分:0)
你永远不会告诉它去另一张纸。 最简单,最直观(尽管不是最好的!)方式是激活每张工作表,然后运行代码。
无论你想为每个循环中的每个工作表做什么,都必须使用ws。这样,您可以轻松地将任何录制的宏添加到循环中。
For Each ws In ActiveWorkbook.Worksheets
ws.activate
cells.select
With selection... yaddayadda
yaddayadda
end with
Next ws
就像我说的,有更好的方法可以做到这一点,但由于你似乎是一个新手,这是最容易理解的。 如果您是高级程序员,请避免使用类似宏录制器的编码,因为它很慢且无效。 (在我看来很明显,但是nvm ......)