1

I would like to know if anyone can help me on this one.

I have a workbook with several tabs and a main page.

On the main page i have a top 20 of issues that are populated automatically. What i want to do is to automatically create hyperlinks on the "number" row, and when i click them to search that number in the workbook and go to as well. Similar to the CTRL+F.

Number - Problem - Status   
IM123
IM124
IM145
ETC..

can someone help me?

Thanks

4

2 に答える 2

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)にあり、1つのセルのみを選択している(Target.Count = 1)限り、クリックしたセルと同じデータを含む次のセルに移動します。

于 2013-02-07T17:16:37.197 に答える
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
于 2013-02-07T18:19:24.127 に答える