查找图纸名称的一部分

所以我有一个客户想要我编写一些代码,以多种方式从另一个电子表格中更新他们的电子表格。

我没有这样做的问题,除了工作簿的工作表,他们想更新名称更改与date。

作为一个例子,工作表将被命名

星期一“Hello World 6.13”
“Hello World 6.17”今天

所以我的问题是,我可以编写代码来查找以“Hello World” 开头的表名并忽略date代码吗?

他们的方式,我会去这个将循环通过活动工作簿中的工作表,并进行比较,当正确的工作表“Hello World x.xx”被发现设置为引用,并使用此引用来运行任何进一步的代码

 For Each ws In ActiveWorkbook.Sheets If Left(ws.Name, 11) = "Hello World" Then Set hwSheet = ws End If Next ws With hwSheet 'do some code eg: .Range("A1").Value = "Hi" End With 

下面发布的是Oliver代码的一个版本,用于处理在循环中find的工作表,而不是最后发现的匹配。

一些其他小调整

  • Left$的string版本比变体Left
  • 如果你在一个循环中设置一个对象,在重新testing之前应该把它设置为空(这在下面的代码中是不明显的,因为我使用了现有的ws

 Sub Updated() Dim ws As Worksheet For Each ws In ActiveWorkbook.Sheets If Left$(ws.Name, 11) = "Hello World" Then With ws 'do something End With End If Next ws End Sub 

另一个返回不带循环的部分表单匹配的选项是在Excel VBA中向数组添加表单名称

这应该够了:

 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 

你可以把它改成一个Function而不是Sub来知道它是否可以select纸张

那么您想要捕获的电子表格总是在同一张工作表中的同一张工作表中? 如果我有这个权利,您可以在客户端的工作簿中使用工作表的代号,如Sheet1而不是工作表名称。

 Dim wb As Workbook, ws as Worksheet Set wb = Workbooks("Client.xls") wb.Activate Set ws = Sheet1 

在使用工作表代号之前,您必须激活相应的工作簿。 为了确保这是有效的,将客户的工作表代号改为独特的(如果不是已经存在的话)是明智的。