Frage von steffan12345679, 70

Excel Blätter durchsuchen und auswählen?

Hallo zusammen

Also: Ich habe einige Excel-Tabellenblätter. Und einen String als Variabel ("sucheName"). Wenn man nun einen Button drückt, sollen alle Blätternamen durchsucht werden und das anschliessend das entsprechende Blatt ausgewählt werden. Da ich ein Anfänger bin im Thema Excel, weiss ich nicht mal, wo ich ansetzen muss.

Ich bedank mich für eure Antworten und hoffe, dass ihr mehr wisst als ich.

Gruss Steffan

Expertenantwort
von Ninombre, Community-Experte für Excel, 40

Die Tabellenblätter kannst Du mit einer for-schleife durchlaufen, sheets.count liefert die Anzahl. Dann kannst Du mit zählenwenn (=countif) jeweils einen Bereich auf der aktuellen Tabellenblatt prüfen. Ein Ergebnis größer 0 bedeutet einen Treffer. Für mein Beispiel habe ich den Bereich auf a1:z100 eingegrenzt, das kannst Du nach belieben erweitern.

Wie meintest Du allerdings, dass das Blatt mit Treffer ausgewählt werden soll? Was genau so da passieren?

Sub suche()
For i = 1 To Sheets.Count
If WorksheetFunction.CountIf(Sheets(i).Range("A1:Z100"), sucheName) > 0 Then
MsgBox ("Gefunden auf Tabellenblatt: " & Sheets(i).Name)
Exit For
End If
Next
End Sub

edit: ich sehe erst jetzt nach richtigem Lesen, dass Du gar nicht den Inhalt der Tabellen durchsuchen willst, sondern die Namen. Dafür ist meine Lösung natürlich Quark, offeltoffel hat die Lösung dafür aber geliefert.

Antwort
von offeltoffel, 36

Ich gehe jetzt mal davon aus, dass du weißt, wie man...

  • einen Button erstellt
  • dem Button einen Code zuweist
  • den Code beim Klick ausführt

Falls nicht, sag bitte nochmal Bescheid!

Hier wäre ein Code-Beispiel:

Private Sub CommandButton1_Click()

Dim n_worksheets As Integer
Dim i As Integer
Dim myString As String

myString = "sucheName" 'oder wie auch immer du die Variable definieren möchtest
n_worksheets = ThisWorkbook.Worksheets.Count

For i = 1 To n_worksheets
If ThisWorkbook.Worksheets(i).Name = myString Then
MsgBox ("Treffer! Gefunden wurde Worksheet #" + Str(i))
ThisWorkbook.Worksheets(i).Select
' oder jeder beliebige Code, was beim Treffer passieren soll
End If
Next i

End Sub


Das Prinzip beruht darauf, dass die Worksheets in Excel sowohl eine Indexnummer ("Worksheets(i)"), als auch einen Namen ("Worksheets(i).name") haben.

Kommentar von steffan12345679 ,

Vielen Dank. So viel weiss ich noch☺

Kommentar von steffan12345679 ,

Kann man den Code noch erweitern, damit auch eine Massagebox erscheint wenn es kein Tabellenblatt mit diesem Namen gibt?

Kommentar von offeltoffel ,

Ja, kann man. Probiers doch mal ohne mich und ich helf dir, wenn es nicht klappt, ok? Dann hast du auch einen eigenen Erfolg :)

Kommentar von steffan12345679 ,

Habe herausgefunden☺

On Error GoTo 0

MsgBox ("Fehlermeldung")

Vielen Dank für deine hilfreichen Antworten. Wenn da was falsch ist bitte melden, aber soweit ich es probierte funktioniert es.

Gruss Steffan

Kommentar von offeltoffel ,

wie hast du dieses Code-Fragment denn eingebaut? Bislang läuft mein Code so: er sucht jedes Tabellenblatt ab, ob es so heißt, wie gesucht. Falls nicht, springt es weiter. Wenn es am Ende angekommen ist, aber nichts gefunden hat, passiert nichts weiter.

Mein Ansatz wäre: Eine neue Variable auf 0 setzen. Beim Suchtreffer auf 1 setzen. Nach der Schleife wird der Wert abgefragt und wenn er auf 0 steht, wird die Fehlermeldung ausgegeben. Man nennt so eine Variable auch "Flag".

Kommentar von steffan12345679 ,

Habe es nach der For-Schleife platziert, funktioniert allerdings nicht. Habe es nur bei einer Fehleingabe getestet, allerdings gibt es immer eine Meldung aus. Ich probier mal deines umzusetzen.

Kommentar von offeltoffel ,

Nach der For-Schleife führt er deinen Befehl in jedem Fall aus. Es ist ja auch kein Fehler, wenn er nichts findet. Er tut ja nichts Falsches, sondern nur einfach nichts ;)

Kommentar von steffan12345679 ,

Stimmt schon, aber man sollte einen Hinweis erhalten, warum das Tool nicht funktioniert. Auf jeden Fall habe ich jetzt einen Boolean erstellt, wenn das Blatt gefunden wurde auf "true" gestellt und wenn nicht dann bleibt er auf "false". In der if-Abfrage wird er auf false getestet. Dann kommt der Hinweis und das klappt so ganz gut. Somit sollte das Problem behoben sein.

Nochmals einen herzlichen Dank.

Kommentar von offeltoffel ,

Alle Achtung, hätte jetzt erwartet, dass du es mit einem Integer löst, aber mit Boolean ist es natürlich eleganter.

Jetzt sollte es klappen. Viel Spaß noch in der Welt des Programmierens ;)

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 34

Die gesamte Arbeitsmappe zu durchsuchen ist eine erweiterte Suchoption. Siehe Screenshot. Den Suchdialog kannst du mit Strg + f aufrufen.

Kommentar von offeltoffel ,

Wenn man nun einen Button drückt, sollen alle Blätternamen durchsucht werden und das anschliessend das entsprechende Blatt ausgewählt werden.

Ich glaube, es ging hier eher um eine VBA-Lösung?

Kommentar von Suboptimierer ,

In meiner Lösung wird ebenfalls ein Button gedrückt und auf das Blatt gewechselt.

Wenn es VBA sein muss, so könnte der Fragesteller den Suchvorgang einfach aufzeichnen.

Kommentar von Suboptimierer ,

Achso, ich sehe gerade, was ich übersehen habe. Mit dem Suchdialog suche ich in den Blättern, nicht in den Blattnamen.

Wurde die Frage editiert? Ninombre sucht auch in den Blättern.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten