假设我有10个工作表,4个名称非常相似:
1.panger tom
2.danger man
3.danger十 4.danger lan
我希望我的代码能够在其名称中找到所有带有文本字符串 danger 的工作表并执行我的代码
我已尝试过以下两种情况:
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
即使没有错误,第一个代码也没有做任何事情。如果名称与我写下的名称完全匹配,则第二个代码只会执行某些操作。
需要任何帮助。
答案 0 :(得分: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
这是一个简单的修复(我所做的只是在每个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
答案 1 :(得分:2)
我认为如果你改变这个,你的第一个代码就会起作用:
If ws.Name Like "danger" Then
*Also tried this version: If ws.Name Like "danger" = True Then*
Range("A1").Interior.ColorIndex = 37
End If
到此:
If ws.Name Like "danger" & "*" Then
ws.Range("A1").Interior.ColorIndex = 37
End If
只是你可以使用“危险*”。
答案 2 :(得分:1)
或没有循环
Sub GetSheets()
Dim strIn As String
Dim X, xArr
strIn = Application.InputBox("Search string", "Enter string to find", "*List*", , , , , 2)
If strIn = "False" Then Exit Sub
ActiveWorkbook.Names.Add "shtNames", "=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND(""]"",GET.WORKBOOK(1)))"
X = Filter([index(shtNames,)], strIn, True, 1)
For Each xArr In X
Sheets(xArr).Range("A1").Interior.ColorIndex = 37
Next
End Sub
答案 3 :(得分:0)
在*
名称前添加星号like
。例如。Name Like "*danger"
Asterisk *
是Excel的通配符