Excel 查找图纸名称的一部分
我想更新工作表。工作表的名称随日期而更改 例如,工作表将被命名为 周一的“Hello World 6.13”节目Excel 查找图纸名称的一部分,excel,vba,Excel,Vba,我想更新工作表。工作表的名称随日期而更改 例如,工作表将被命名为 周一的“Hello World 6.13”节目 今天的“你好,世界6.17” 如何查找以“Hello World”开头而忽略日期代码的工作表名称?这就足够了: Sub CallTheRealThing() Call SelectSheets("Sheet") End Sub Sub SelectSheets(NameNeededinSheet As String, Optional Looked_Workbook As Workb
今天的“你好,世界6.17” 如何查找以“Hello World”开头而忽略日期代码的工作表名称?这就足够了:
Sub CallTheRealThing()
Call SelectSheets("Sheet")
End Sub
Sub SelectSheets(NameNeededinSheet As String, Optional Looked_Workbook As Workbook)
Dim WorkSheetProject As Worksheet
If Looked_Workbook Is Nothing Then Set Looked_Workbook = ThisWorkbook
For Each WorkSheetProject In Looked_Workbook.Worksheets
If InStr(WorkSheetProject.Name, NameNeededinSheet) Then: WorkSheetProject.Select: Exit Sub
Next WorkSheetProject
End Sub
您可以将其更改为函数,而不是sub,以了解它是否可以选择工作表我的方法是循环活动工作簿中的工作表并进行比较,当找到正确的工作表“Hello World x.xx”时,将其设置为引用,并使用此引用运行任何进一步的代码
Let searchTerm = "Hello World"
For Each ws In ActiveWorkbook.Sheets
If Left(ws.Name, Len(searchTerm)) = searchTerm Then
Set hwSheet = ws
Exit For
End If
Next ws
'do some code eg:
With hwSheet
.Range("A1").Value = "Hi"
End With
那么,您要捕获的电子表格始终是同一工作表,在同一工作簿中?如果我没有弄错,您可以在客户的工作簿中使用工作表的代码名,例如
Sheet1
,而不是工作表名
Dim wb As Workbook, ws as Worksheet
Set wb = Workbooks("Client.xls")
wb.Activate
Set ws = Sheet1
在使用工作表代码名之前,必须激活相应的工作簿。为确保这一点,如果客户的工作表代码名在您的权限范围内,则应谨慎地将其更改为唯一的(如果尚未更改)。下面发布的是Oliver代码的一个版本,它解决了在循环中使用找到的工作表的问题,而不是上次找到的匹配项 其他一些小的调整
的字符串版本比变体Left$
Left
- 如果在循环中设置对象,则应在重新测试之前将其设置为nothing(这在下面的代码中不明显,因为我使用了现有的
)ws
另一个不带循环返回所有部分工作表匹配的选项是在中,而我喜欢@Carrosives answer()。我决定把它功能化。在这方面,我不想使用
LEFT
或RIGHT
,而是InSTR
以下是我得到的:
Public Function FindWorksheet(PartOfWSName As String) As Worksheet
For Each ws In ActiveWorkbook.Sheets
If InStr(ws.Name, PartOfWSName) > 0 Then
Debug.Print ws.Name
Set FindWorksheet = ws
Exit For
End If
Next ws
End Function
Sub TestingSpot_Sub()
Dim PartOfWSName As String
PartOfWSName = "Testz"
Dim ws As Worksheet
Set ws = FindWorksheet(PartOfWSName)
ws.Activate
End Sub
您研究过内置的Left()函数吗?另外,
Instr(…)
可能会有一些用处。工作表(x)。名称如“Hello World*”,如果工作簿已保存,则可以使用单元格内公式完成此操作:谢谢。我知道这很容易。我甚至没有想到使用left>@Addohm乐于帮助,我认为有时围绕需求进行的复杂讨论毫无意义,会让我们觉得我们需要一个复杂的解决方案,但幸运的是我们需要一些外部输入:)请注意,Hello World
是11
个字符,两个数字都需要匹配@FreeSoftwareServers好的一点-我已经更新了代码,以说明搜索词的其他长度使用工作表的代码(名称)是一个好主意,但您无需激活相应的工作簿,因为Sheet1
引用了您正在执行代码的当前项目,并且只有一个具有此代码名的唯一工作表。设置ws=Sheet1
而不是直接引用它也可能是多余的,例如通过在带有Sheet1的中包含更多的代码<代码>以结构结尾:-)
Public Function FindWorksheet(PartOfWSName As String) As Worksheet
For Each ws In ActiveWorkbook.Sheets
If InStr(ws.Name, PartOfWSName) > 0 Then
Debug.Print ws.Name
Set FindWorksheet = ws
Exit For
End If
Next ws
End Function
Sub TestingSpot_Sub()
Dim PartOfWSName As String
PartOfWSName = "Testz"
Dim ws As Worksheet
Set ws = FindWorksheet(PartOfWSName)
ws.Activate
End Sub