假设我有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
拿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
第一个代码没有做任何事情,即使没有错误.如果名称与我写下的名称完全匹配,则第二个代码只会执行某些操作.
需要任何帮助.
我很确定你只需要明确添加你正在使用的工作表.
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
这是一个简单的修复(我所做的只是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
请注意,使用With
允许您只使用"占位符" .
来引用WS
(或后面的任何内容With
).请参阅我添加的Range(Cells(),Cells())
用于此的一个好例子的行.
编辑:使用If ws.Name like "danger" Then
将仅在命名表运行danger
(小写,无空格).如果您希望这种名为像床单工作DangerMouse
,DangerDoom
,Carlos Danger
,那么你就需要使用... Like "*danger*" Then