Excel Blätter durchsuchen und auswählen?

3 Antworten

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.

steffan12345679 
Fragesteller
 31.08.2016, 14:32

Vielen Dank. So viel weiss ich noch☺

1
steffan12345679 
Fragesteller
 31.08.2016, 14:52

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

0
offeltoffel  31.08.2016, 14:53
@steffan12345679

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

0
steffan12345679 
Fragesteller
 31.08.2016, 14:58
@offeltoffel 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

0
offeltoffel  31.08.2016, 15:00
@steffan12345679

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".

1
steffan12345679 
Fragesteller
 31.08.2016, 15:04
@offeltoffel

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.

0
offeltoffel  31.08.2016, 15:08
@steffan12345679

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 ;)

1
steffan12345679 
Fragesteller
 31.08.2016, 15:13
@offeltoffel

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.

1
offeltoffel  31.08.2016, 15:19
@steffan12345679

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 ;)

0

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.

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

Suche über Arbeitsmappe - (Microsoft Excel, VBA, Tabellenblätter)
offeltoffel  31.08.2016, 13:54

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?

0
Suboptimierer  31.08.2016, 13:59
@offeltoffel

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.

0
Suboptimierer  31.08.2016, 14:01
@offeltoffel

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.

0