单击搜索并转到工作簿中的单元格

时间:2013-02-03 20:05:17

标签: search hyperlink tags excel

我想知道是否有人可以帮助我。

我有一个包含多个标签和主页的工作簿。

在主页面上,我有自动填充的前20个问题。 我想要做的是自动创建“数字”行上的超链接,当我点击它们来搜索工作簿中的那个数字,然后去。与CTRL + F类似。

Number - Problem - Status   
IM123
IM124
IM145
ETC..

有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:0)

Worksheet_SelectionChange事件中,您可以使用类似的内容来搜索数据

If Not Intersect(Target, Range("A1:A4")) Is Nothing Then
    If Target.Count = 1 Then
        Cells.Find(What:=Target.Value, LookIn:=xlFormulas, LookAt:= _
                   xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                   After:=ActiveCell, SearchFormat:=False).Activate
    End If
End If

这将移动到包含与您单击的单元格相同的数据的下一个单元格,只要您处于指定范围(A1:A4)并且您只选择了一个单元格< EM>(Target.Count = 1)

答案 1 :(得分:0)

以下内容将搜索您选择的单元格中的数字。 除了查找第一个结果外,它还会询问您是否要继续搜索下一个结果。这样,如果您有多个问题实例,则可以“循环”遍历工作表中的所有结果。它还会忽略包含前20个问题的MainWorksheet上的搜索结果。 Cells.Find本身只会返回找到的第一个结果,即使它在同一个工作表中。

它还会告诉您是否在每张工作表中找到了问题编号,以及是否已检查所有工作表(如果找不到更多结果)。如果您回复说您不想继续搜索,它将转到在已检查的最新工作表中找到的问题编号的第一个实例。

为了模拟超链接,您需要使用工作表事件,例如Intersect(在Sean的答案中描述)或FollowHyperlink。就个人而言,我更倾向于在可能的情况下使用工作表事件的替代方案,因为它们将始终在满足条件时触发,即使是无意中也是如此。例如,您可以创建一个形状或宏按钮并将宏指定给它。这样,代码只会在用户点击按钮时运行。

此外,如果您确定问题后还有更多您真正想做的事情,请告诉我们。例如,您可以自动更改相关单元格,或创建找到的该问题(或所有问题)的所有实例的列表。

祝你好运!

'Create a string variable to store the problem status
    Dim StringProblemStatus As String

'Create a string variable to store the worksheet name of the main page containing the problem status
    Dim StringMainWorksheet

'Create a range variable to store the results of the Find method
    Dim RangeFindResults As Range

'Create an integer variable to store the current worksheet number
    Dim IntegerSheetCount As Integer

'Set the variable to the problem status stored in the current cell
    StringProblemStatus = Selection.Value

'Set the variable to the worksheet name containing the problem status
    StringMainWorksheet = ActiveSheet.Name

'Create a For/Next loop so that the following code will evaluate all worksheets in the workbook
    For IntegerSheetCount = 1 To ActiveWorkbook.Sheets.Count
    Sheets(IntegerSheetCount).Activate

'Search for the problem number within the worksheet

        'Check that the sheet being searched is not the MainWorksheet
        If ActiveSheet.Name <> StringMainWorksheet Then

            'Searches for exact matches
            Set RangeFindResults = _
            Cells.Find( _
            What:=StringProblemStatus, _
            After:=ActiveCell, _
            LookIn:=xlFormulas, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            SearchFormat:=False _
            )

            'Returns a message to the user if the status is not found
            If RangeFindResults Is Nothing Then
                MsgBox "Problem Status " & StringProblemStatus & " was not found in worksheet " & Sheets(IntegerSheetCount).Name
            Else

                'Returns a message to the user if the status is found
                If MsgBox("Problem Status " & RangeFindResults & " found in worksheet " & _
                Sheets(IntegerSheetCount).Name & " in cell " & " " & RangeFindResults.Address & _
                ". Continue searching?", vbYesNo) = vbNo Then

                    RangeFindResults.Activate 
                    Exit Sub

                End If

            End If

        End If

    'Move to the next worksheet
    Next IntegerSheetCount

    'Notify the user that all worksheets have been searched
    MsgBox "All worksheets searched"

End Sub