我有一个包含多个项目的工作簿。每个项目都有它自己的表。在这些工作表的每一个中都有订单编号的列(" 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
答案 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
假设:
Table
个对象。如果他们不这样做,您需要编辑第11行以指向包含OrderNub
数据的任何范围。Set rng = ws.Range("C1").EntireColumn.Find(strOrder)
MasterList
。这与选项卡上显示的工作表名称不同。这是VBA代码名称。我更喜欢使用它,因为它不太可能被改变并打破支票。您可以在VBA编辑器中找到代号。例如,在此屏幕截图中,第一个工作表的代号为shtAgingTable
,名称(如Excel中的选项卡所示)为AgingTable
。
这是一个功能,而不是子程序。这意味着你不能运行一次。它的意思是像任何其他内置函数一样使用,例如SUM
,IF
,等等。例如,您可以在单元格B2
中使用以下公式:
=FindMyOrderNumber($A2)