Kelly的工作簿包含数百个工作表。每个工作表代表她公司的一个单独项目。每个工作表的单元格C4包含该特定项目的项目编号。

充其量,要从工作簿中的数百个项目中查找单个项目很麻烦。她想知道是否可以创建一个宏,该宏将使所有用户输入作业编号,在单元格C4中找到具有该作业编号的工作表,然后显示该工作表。

在解决如何在宏中执行此操作之前,您应该了解,您可以使用Excel的本机工具找到所需的项目。

您需要做的就是遵循以下步骤:

。按Ctrl + F。 Excel将显示“查找和替换”对话框的“查找”选项卡。

。单击选项按钮以展开对话框。 (请参见图1。)

。使用“内部”下拉列表,选择“工作簿”。

。如果每个工作表中的单元格C4仅包含项目编号,请选中​​“匹配整个单元格内容”复选框。

。单击查找下一个。

而已;您应该被带到包含您的项目编号的单元格的第一个实例。如果您的工作簿在多个单元格(单元格C4除外)中包含项目编号,则使用“查找”工具可能会有些繁琐;否则,可能会很麻烦。您需要继续单击“查找下一个”,直到找到正确的工作表。在这种情况下,宏可能是最好的解决方案,因为它允许您专门查看单元格C4并忽略任何其他单元格中的内容。

下面的宏提示用户输入项目号。然后,它在工作簿中的每个工作表中搜索第一个工作表,其中单元格C4包含该项目编号。如果找到,宏将显示工作表并激活单元格。如果未找到,则会显示一条消息指示此情况。

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

此宏有两个潜在的问题。首先,如果您的项目编号实际上是一个数字,则宏在寻找文本字符串时可能找不到它。其次,如果有多个使用相同项目编号的工作表,您将永远不会知道它,因为宏始终会在单元格C4中第一个匹配项目编号的工作表处停止。您可以通过在宏中进行一些更改来克服这两个问题。

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

使用此版本的宏,仅当项目编号在所有工作表中唯一时,才显示项目工作表。如果有多个实例的项目编号相同,则会通知您这些工作表的名称,但不会选择任何工作表。

如果需要,可以通过将所有工作表重命名为项目编号来简化宏。确保没有项目实际使用两个工作表也将带来额外的好处。 (所有工作表名称必须唯一,因此,如果每个工作表都使用一个项目号作为名称,则每个项目号只能有一个工作表。)如果采用这种方法,则可以使用类似于以下内容的宏来查找和跳转到所需的工作表:

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本提示(13489)适用于Microsoft Excel 2007、2010、2013和2016。