循环显示具有特定名称的工作表

Dar*_*uki 4 excel vba excel-vba

假设我有10个工作表,4个具有非常相似的名称:

1.danger tom
2.danger man
3.danger ten
4.danger lan

我希望我的代码能够找到名称中包含文本字符串危险的所有工作表并执行我的代码

我尝试了以下两个实例:

Public Sub SubName()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets

    If ws.Name Like "danger" Then
       *Also tried this version: If ws.Name Like "danger" = True Then*

        Range("A1").Interior.ColorIndex = 37
    End If

Next ws

End Sub 
Run Code Online (Sandbox Code Playgroud)

拿2

Sub WorksheetLoop()

Dim ws  As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    If InStr("danger", ws.Name) > 0 Then
        Range("A1").Interior.ColorIndex = 37
    End If
Next ws

End Sub
Run Code Online (Sandbox Code Playgroud)

第一个代码没有做任何事情,即使没有错误.如果名称与我写下的名称完全匹配,则第二个代码只会执行某些操作.

需要任何帮助.

Bru*_*yne 5

我很确定你只需要明确添加你正在使用的工作表.

Public Sub SubName()
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    If ws.Name Like "danger" Then
      ' *Also tried this version: If ws.Name Like "danger" = True Then*
        ws.Range("A1").Interior.ColorIndex = 37
    End If
Next ws

End Sub

Sub WorksheetLoop()

Dim ws  As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    If InStr("danger", ws.Name) > 0 Then
        ws.Range("A1").Interior.ColorIndex = 37
    End If
Next ws

End Sub
Run Code Online (Sandbox Code Playgroud)

这是一个简单的修复(我所做的只是ws.在每个之前添加Range()),但在处理多个工作表时非常重要.使用多个范围时始终明确.如果您正在使用Cells(),Row(),Column()等你应该添加您正在使用以及工作表.

使用另一种布局With(例如,参见下面的SubName()例程):

Public Sub SubName()
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    With ws
    If .Name Like "danger" Then
      ' *Also tried this version: If ws.Name Like "danger" = True Then*
        .Range("A1").Interior.ColorIndex = 37
      ' For illusatration, this will color the range A1:B10
      ' .Range(.Cells(1,1),.Cells(10,2)).Interior.ColorIndex = 37
    End If
    End with
Next ws

End Sub
Run Code Online (Sandbox Code Playgroud)

请注意,使用With允许您只使用"占位符" .来引用WS(或后面的任何内容With).请参阅我添加的Range(Cells(),Cells())用于此的一个好例子的行.

编辑:使用If ws.Name like "danger" Then在命名表运行danger(小写,无空格).如果您希望这种名为像床单工作DangerMouse,DangerDoom,Carlos Danger,那么你就需要使用... Like "*danger*" Then


Fad*_*adi 3

我认为如果您更改此代码,您的第一个代码将会起作用:

 If ws.Name Like "danger" Then
   *Also tried this version: If ws.Name Like "danger" = True Then*

    Range("A1").Interior.ColorIndex = 37
End If
Run Code Online (Sandbox Code Playgroud)

对此:

If ws.Name Like "danger" & "*" Then    
     ws.Range("A1").Interior.ColorIndex = 37
End If
Run Code Online (Sandbox Code Playgroud)

只需使用“危险*”即可。