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)
第一个代码没有做任何事情,即使没有错误.如果名称与我写下的名称完全匹配,则第二个代码只会执行某些操作.
需要任何帮助.
我很确定你只需要明确添加你正在使用的工作表.
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
我认为如果您更改此代码,您的第一个代码将会起作用:
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)
只需使用“危险*”即可。