从循环中排除命名工作表时出现问题

问题描述 投票:0回答:1

在我的工作场所,我有一个我们正在跟踪用于施工目的的柱的数据库。大约有 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

随意完全重新设计代码和/或使用其他方法——我不喜欢这种结构。

提前致谢!

托马斯

excel vba loops for-loop if-statement
1个回答
0
投票

我想你的意思是

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"
© www.soinside.com 2019 - 2024. All rights reserved.