Excel:给定变量的查找表名称excel

时间:2015-02-16 19:31:26

标签: excel vba excel-vba

我有一个包含多个项目的工作簿。每个项目都有它自己的表。在这些工作表的每一个中都有订单编号的列(" OrderNub")。

在另一张名为" MasterList"包含所有项目中的所有订单号。此列表位于A列中。

我需要一个能够搜索所有工作表的功能或宏(条形图MasterList),并在B列中显示工作表名称。

以下是我在Excel中的内容:

Option Explicit
Function FindMyOrderNumber(strOrder As String) As String

    Dim ws As Worksheet
    Dim rng As Range

    For Each ws In Worksheets
        If ws.CodeName <> "MasterList" Then
            Set rng = Nothing
            On Error Resume Next
                FindMyOrderNumber = ws.Name
            On Error GoTo 0
            If Not rng Is Nothing Then
                FindMyOrderNumber = ws.Range("A1").Value
                Exit For
            End If
        End If
    Next

    Set rng = Nothing
    Set ws = Nothing

End Function

1 个答案:

答案 0 :(得分:1)

Option Explicit
Function FindMyOrderNumber(strOrder As String) As String

    Dim ws As Worksheet
    Dim rng As Range

    For Each ws In Worksheets
        If ws.CodeName <> "MasterList" Then
            Set rng = Nothing
            On Error Resume Next
                Set rng = ws.Columns(1).Find(strOrder)
            On Error GoTo 0
            If Not rng Is Nothing Then
                FindMyOrderNumber = ws.Name
                Exit For
            End If
        End If
    Next

    Set rng = Nothing
    Set ws = Nothing

End Function

假设:

  1. 您的项目会为我们提供Table个对象。如果他们不这样做,您需要编辑第11行以指向包含OrderNub数据的任何范围。
  2. 如果不是表格,那么您的项目至少使用完全相同的布局。在这种情况下,您可以将第11行更改为:Set rng = ws.Range("C1").EntireColumn.Find(strOrder)
  3. 主列表的代码名称MasterList。这与选项卡上显示的工作表名称不同。这是VBA代码名称。我更喜欢使用它,因为它不太可能被改变并打破支票。您可以在VBA编辑器中找到代号。例如,在此屏幕截图中,第一个工作表的代号为shtAgingTable,名称(如Excel中的选项卡所示)为AgingTable
  4. Screenshot

    这是一个功能,而不是子程序。这意味着你不能运行一次。它的意思是像任何其他内置函数一样使用,例如SUMIF,等等。例如,您可以在单元格B2中使用以下公式:

    =FindMyOrderNumber($A2)