查找工作表名称的一部分

时间:2016-06-17 13:23:14

标签: excel excel-vba vba

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

我这样做没有问题,除了他们想要更新名称的工作簿工作表随日期变化。

作为示例,工作表将被命名为

  星期一

“Hello World 6.13”   今天“Hello World 6.17”

所以我的问题是,我可以用“Hello World”编写寻找启动的工作表名称的代码吗?忽略日期代码

5 个答案:

答案 0 :(得分:2)

我会这样做,这将是循环活动工作簿中的工作表并进行比较,当找到正确的工作表“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

答案 1 :(得分:1)

下面发布的是Oliver代码的一个版本,它解决了在循环中使用找到的工作表的问题,而不是最后找到的匹配。

其他一些小调整

  • using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CBR { public partial class mainFrm : Form { public mainFrm() { InitializeComponent(); } private void mainFrm_Load(object sender, EventArgs e) { } private void clipboardUpdater_Tick(object sender, EventArgs e) { richTextBox1.Text = Clipboard.GetText(); } } } 的字符串版本比变体Left$
  • 更快
  • 如果你在循环中设置一个对象,应该在重新测试之前将其设置为空(这在下面的代码中并不明显,因为我使用了现有的Left

ws

在没有循环的情况下返回所有部分工作表匹配的另一个选项是Adding Sheet Names to Array in Excel VBA

答案 2 :(得分:0)

这应该足够了:

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,以了解它是否可以选择工作表

答案 3 :(得分:0)

因此,您要捕获的电子表格在同一工作簿中始终是同一个工作表吗?如果我已经做到了这一点,您可以在客户端的工作簿中使用工作表的代号,例如Sheet1而不是工作表名称。

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

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

答案 4 :(得分:0)

虽然我喜欢@Carrosives答案(https://stackoverflow.com/a/37882970/5079799)。我决定对其进行功能化。在这方面,我不想使用LEFTRIGHT而是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