Excel 查找图纸名称的一部分

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

我想更新工作表。工作表的名称随日期而更改

例如,工作表将被命名为

周一的“Hello World 6.13”节目
今天的“你好,世界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