Sökning i en arbetsbok

Här demonstreras en teknik för att söka efter ett värde e d i en arbetsbok.

Tekniken kan vara intressant om vi arbetar med omfattande arbetsböcker och där vi kanske även har ett "startblad".

Koden kan kopieras och klistras in direkt i en modul eller så kan du hämta ett exempel här.

Option Explicit

Sub Sök_Alla_Blad()
Dim wsBlad As Worksheet
Dim stHittaStrang As String
Dim rnFAdress As Range, rnAktiv As Range
Dim stMeddText As String, stPrompt As String, _
stTitel As String, stSvar As String

stMeddText = "Sökbegreppet har hittats: Vill du fortsätta _
                       sökningen?"
stPrompt = "Ange det som ska sökas efter:"
stTitel = "Sök igenom alla blad"

On Error Resume Next
stHittaStrang = Application.InputBox( _
                      Prompt:=stPrompt, _
                      Title:=stTitel, _
                      Type:=2)

If stHittaStrang = "" Then
       MsgBox "Söka efter en tom sträng går inte!"
       End
End If

'Här initieras sökprocessen mha "Find".
For Each wsBlad In ActiveWorkbook.Worksheets
With wsBlad.UsedRange
           Set rnAktiv = .Find(stHittaStrang, LookIn:=xlValues, _
                                Lookat:=xlPart, MatchCase:=False)

'Om sökningen ger resultat så aktiveras bladet
       If Not rnAktiv Is Nothing Then
            rnFAdress = rnAktiv.Address
           wsBlad.Activate

'Här initieras en loop för fortsatt sökning eller ej.
       Do
       stSvar = MsgBox(stMeddText, vbYesNo, stTitel)

'Om svaret är nej (VBNo = 7) så avslutas sökningen.
       If stSvar = 7 Then End

'Om sökningen ska fortsätta så sker det mha "FindNext".
       Set rnAktiv = .FindNext(rnAktiv)
       Loop While Not rnAktiv Is Nothing And _
                      rnAktiv.Address  <> rnFAdress
      End If
End With
Next
End Sub