在我的工作场所,我有一个我们正在跟踪用于施工目的的柱的数据库。大约有 70 个工作表都基于同一模板(我将其称为标准工作表),其中包含每列的数据。每个标准工作表都具有与其他标准工作表相同的列宽。然而,工作簿中标题为“列索引”、“列列表”和“模板”的前三张工作表(我将这些工作表称为“非标准工作表”)与其他工作表相比具有不同的列宽在作业本上。
我正在尝试创建一个宏,该宏将调整整个工作簿中每个标准工作表上一系列列的列宽,以防我的项目经理决定他们希望一组列比当前更宽为了更好地适应页面(这种情况以前发生过,所以我尝试自动化该任务,而不是手动调整 70 多张纸上的列大小)。我希望这个宏排除非标准图纸。
我浏览了数十个示例(按名称排除工作表)并尝试使用它们,但我显然做错了。我尝试在整个代码中使用 Select Case、If 语句和 If <...> Not 语句,使用实际工作表名称和 VBA 项目浏览器工作表名称,但均无济于事。我认为最好的方法可能是使用一系列使用整数编号的工作表,从第一个标准表开始,但我似乎不知道该怎么做。我也完全有可能不小心通过后面的代码行调用了整个工作簿。
我知道我的非标准工作表在 VBA 项目浏览器中的命名如下
“列索引”是“Sheet1” – 此表是一个汇总表,编译标准表中的数据 “列列表”是“Sheet2” – 此表包含所有标准表名称的列表
“模板”是“表 4”——此表是标准表的模板
我已删除并创建了工作表,因此第一个标准工作表的实际名称在 VBA 项目浏览器中为“Sheet5”,最后一个标准工作表在 VBA 项目浏览器中为“Sheet79”,以防万一尝试使用一系列数字。这是我到目前为止所得到的:
Sub ChangeChosenColumnSizesToMatchLargest()
Dim ws As Worksheet
Dim c As Integer
Dim m As Variant
Dim ColumnWidth As Variant
For Each ws In ActiveWorkbook.Worksheets 'For all sheets
If ws.Name <> "Column Index" And "Column List" And "Template" Then 'Except Non-Standard
For c = 7 To 10 'For columns G through J
m = 0 'Reset the column width
For Each w In Worksheets 'Check all Standard Sheets
If w.Columns(c).ColumnWidth > m Then 'If a column is bigger than m
m = w.Columns(c).ColumnWidth 'Reset it
End If
Next w 'Check next Standard Sheet
For Each w In Worksheets 'Check all Standard Sheets
If w.Columns(c).ColumnWidth = 0 Then 'Once a column is reset
w.Columns(c).ColumnWidth = m 'Change width to new width
End If
Next w 'Check next Standard Sheet
Next c 'Check next column
End If
Next ws 'Check next Standard Sheet
End Sub
随意完全重新设计代码和/或使用其他方法——我不喜欢这种结构。
提前致谢!
托马斯
我想你的意思是
If ws.Name <> "Column Index" Or ws.Name <> "Column Index" Or ws.Name <> "Column Index" Then
而不是
If ws.Name <> "Column Index" And "Column List" And "Template"