Suchfunktion über mit Command Button

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Suchfunktion über mit Command Button

    Hallo,

    ich habe folgendes Problem. Ich kenn mich leider noch nicht so gut mit VB aus...

    Ich möchte in einer Excel Arbeitsmappe ein Suchfunktion einbauen.

    Das Suchen funktioniert bereits, aber ich möchte noch den jeweils gesuchten Wert mit einer Farbe z.B. rot hervorheben.



    Private Sub CommandButton1_Click()
    Call SearchAllTables
    End Sub


    Public Sub SearchAllTables()
    Dim ws As Worksheet
    Dim c
    Dim firstAddress As String
    Dim secAddress
    Dim GFound As Boolean
    Dim GWeiter As Boolean

    GWeiter = False
    GFound = False
    anf:
    SSearch = InputBox("Suchen nach:", "Search In All Tables", SSearch)

    If SSearch = "" Then
    End
    End If
    weiter:
    For Each ws In Worksheets
    'ws.Select
    With ws.Cells
    Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
    If Not c Is Nothing Then
    GFound = True
    ws.Select
    c.Select
    firstAddress = c.Address
    If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes Then
    Do
    Set c = .FindNext(c)


    secAddress = c.Address
    If c.Address = firstAddress Then
    Exit Do
    End If
    c.Select
    If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbNo Then
    GWeiter = True
    GoTo ende
    End If
    Loop While Not c Is Nothing And secAddress <> firstAddress And c.Address <> firstAddress
    Else
    GWeiter = True
    GoTo ende
    End If
    End If
    End With
    Next ws

    ende:

    If GFound = False Then
    If MsgBox("Suchwert nicht gefunden ! Neue Suche ?", vbInformation + vbYesNo) = vbYes Then
    GoTo anf:
    End If
    Else
    If GWeiter = False Then
    If MsgBox("Sie haben alle Tabellenblätter durchsucht ! Soll die Suche neu gestartet werden ?", vbInformation + vbYesNo) = vbYes Then
    GoTo weiter
    End If
    End If
    End If

    End Sub




    Kann mir da jemand weiter helfen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FloP“ ()

    @FloP:: Willkommen im Forum. :thumbup:
    1. formatiere bitte Deinen Code. Bearbeite Deinen 1. Post (Button Bearbeiten), markiere den Quelltext und drück auf den [VB]-Button oberhalb des Edit-Fensters.
    2. Handelt es sich bei Deinem Problem um einen VBA-Code (nicht aber VB.NET-Code)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So bin jetzt schon wieder weitegekommen. Ein Problem hab ich aber noch.

    Wenn ich das Arbeitsblatt durchsuche und das Programm den ersten Treffer findet, wird die Zelle in der gewünschten Farbe ( in dem Fall orange) hinterlegt.

    Dann frägt da Programm, ob es weitersuchen soll oder nicht....

    Wenn man auf nicht weitersuchen geht, dann beendet das Programm die Suche, aber die Zelle bleibt orange hinterlegt.

    Es soll aber wieder weiß hinterlegt werden...

    Was muss ich da noch ändern?


    Private Sub CommandButton1_Click()
    Call SearchAllTables
    End Sub


    Public Sub SearchAllTables()
    Dim ws As Worksheet
    Dim c
    Dim firstAddress As String
    Dim secAddress
    Dim GFound As Boolean
    Dim GWeiter As Boolean

    GWeiter = False
    GFound = False
    anf:
    SSearch = InputBox("Suchen nach:", "Arbeitsmappe durchsuchen", SSearch)

    If SSearch = "" Then
    End
    End If
    weiter:
    For Each ws In Worksheets
    'ws.Select

    With ws.Cells
    Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)

    If Not c Is Nothing Then
    GFound = True
    ws.Select
    c.Select
    c.Interior.Color = RGB(255, 215, 0) 'für den Zellhintergrund
    firstAddress = c.Address

    If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes Then
    Do
    c.Select
    c.Interior.Color = RGB(255, 255, 255) 'für den Zellhintergrund
    c.Select
    c.Interior.Color = RGB(255, 255, 255) 'für den Zellhintergrund
    firstAddress = c.Address

    Set c = .FindNext(c)


    secAddress = c.Address
    If c.Address = firstAddress Then
    Exit Do
    End If
    c.Select
    c.Interior.Color = RGB(255, 215, 0) 'für den Zellhintergrund
    If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbNo Then
    c.Interior.Color = RGB(255, 255, 255) 'für den Zellhintergrund
    firstAddress = c.Address
    GWeiter = True
    GoTo ende

    End If
    Loop While Not c Is Nothing And secAddress <> firstAddress And c.Address <> firstAddress

    Else
    GWeiter = True
    GoTo ende
    End If
    End If
    End With
    Next ws

    ende:

    If GFound = False Then
    If MsgBox("Suchwert nicht gefunden ! Neue Suche ?", vbInformation + vbYesNo) = vbYes Then

    GoTo anf:
    End If
    Else
    If GWeiter = False Then
    If MsgBox("Sie haben alle Tabellenblätter durchsucht ! Soll die Suche neu gestartet werden ?", vbInformation + vbYesNo) = vbYes Then

    GoTo weiter
    End If
    End If
    End If

    End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FloP“ ()

    Wenn du die Zelle nur während der MsgBox möchtest, musst du sie danach wieder abschalten.
    So ganz strukturiert ist dein Code ja nicht.
    Aber du wirst dich da schon irgendwie durchkämpfen.

    Visual Basic-Quellcode

    1. c.Interior.Color = RGB(255, 215, 0)
    2. ContinueSearch = MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes
    3. c.Interior.Color = RGB(255, 255, 255)
    4. If ContinueSearch Then
    5. 'weitersuchen


    Und verwende das nächste mal bitte VB-Tags, um im Post den Code zu formatieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --