Rubrik: Excel | VB-Versionen: VBA | 10.04.03 |
Arbeitsblatt wechseln, aber richtig (Excel/VBA) Vor dem Wechseln in ein anderes Arbeitsplatz sollte man prüfen, ob dies überhaupt vorhanden ist... | ||
Autor: Heinz Wölfel | Bewertung: | Views: 265.886 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Der einfache VBA- Befehl zum Anzeigen eines anderen Arbeitsblattes
Wie man in EXCEL unter VBA zu einem anderen Arbeitsblatt (Sheet) wechselt hat sich sicher schon herumgesprochen (man kann es ja notfalls auch aufzeichnen):
Sub Makro1() Sheets(4).Select ' ... oder Worksheets(4).Select End Sub
Sub Makro2() Sheets("Mein_Arbeits_Blatt").Select ' ... oder Worksheets("Mein_Arbeits_Blatt").Select End Sub
Das ist ja auch nicht falsch so. Was aber, wenn im ersten Fall (Makro1) die Arbeitsmappe weniger als vier Blätter hat? Oder aber wenn im zweiten Fall (Makro2) die Mappe überhaupt kein Sheet mit diesen Namen hat? Natürlich! Excel meckert rum und der User erhält eine Fehlermeldung!
Damit der User nicht auf der VBA-Oberfläche landet und der Programmierer augenblicklich mit einem Schimpfwort in Verbindung gebracht wird, sollten diese Fehler abgefangen werden!
Was ist zu tun?
Na logisch, man muss vor dem Wechsel in eine andere Mappe immer nachschauen, ob diese vorhanden ist! Im ersten Fall (Makro11) prüft man die Anzahl der Mappen. Im zweiten Fall (Makro12) wird über die Auflistung aller Sheets in der Mappe nachgeschaut, ob es das gewünschte Blatt schon gibt.
Anmerkung:
- Um Makro11 zu testen, sollten weniger als 4 Sheets in der Mappe sein!
- Um Makro12 zu testen, bitte das Blatt "Mein_Arbeits_Blatt" löschen!
Sub Makro11() ' Testen ob es mindestens 4 Arbeitsblätter ' in der Mappe gibt und ... If Sheets.Count < 4 Then ' ... wenn nein: eine entsprechende Fehlermeldung ausgeben: MsgBox " Umschalten auf Blatt 4 nicht möglich ! ", _ 48, " Arbeitsblatt nicht vorhanden :-( " Else ' ... wenn ja: Anzeige auf das 4-te Blatt umschalten. Sheets(4).Select End If End Sub
Sub Macro12() ' Hilfsvariablen Dim i As Integer Dim bExists As Boolean ' Testen ob's ein Sheet mit dem Namen ' "Mein_Arbeits_Blatt" gibt und ... For i = 1 To Sheets.Count If Sheets(i).Name = "Mein_Arbeits_Blatt" Then bExists = True: Exit For End If Next i If bExists Then ' ... wenn ja: Anzeige auf dieses Blatt umschalten Sheets("Mein_Arbeits_Blatt").Select Else ' ... wenn nein: ein solches Blatt erstellen. Beep Sheets.Add ActiveSheet.Name = "Mein_Arbeits_Blatt" End If End Sub
Alternative:
Wer die For-Next-Schleifen nicht so mag, kann den Anfang von Makro12 auch so abändern:
' Hilfsvariablen Dim ws As Worksheet Dim bExists As Boolean ' Alle vorhandenen Arbeitsblätter durchlaufen For Each ws In Worksheets If ws.Name = "Mein_Arbeits_Blatt" Then bExists = True: Exit For End If Next ...