Rubrik: Excel | VB-Versionen: VBA | 21.01.03 |
Datei öffnen in EXCEL, aber richtig Dieser Tipp zeigt, wie sich aus einer Excel-Arbeitsmappe eine neue Arbeitsmappe öffnen lässt, ohne Fehlermeldung! | ||
Autor: Heinz Wölfel | Bewertung: | Views: 145.383 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wie man in EXCEL unter VBA eine (neue/weitere) Arbeitsmappe öffnet hat sich sicher schon herumgesprochen (kann man ja auch aufzeichnen):
Workbooks.Open Filename:="C:\Mappe2.xls"
Das ist auch richtig so. Was aber, wenn die Datei (d.h. Arbeitsmappe) schon geöffnet ist und vom User in der Zwischenzeit verändert wurden? Wenn wir also die (bereits veränderte) Mappe nochmals öffnen meckert Excel herum und der User erhält folgende Meldung:
Dies ist sicher nicht im Sinne des Erfinders und verwirrt den Benutzer. Noch schlimmer ist aber, dass dieser sich jetzt in der Excel-Falle befindet!! Er hat ja nur zwei Möglichkeiten zu klicken:
- Er klickt auf JA: Die bisherigen Änderungen in der bereits geladenen Mappe gehen verloren, die Mappe wird neu geladen!
- Er klickt auf NEIN oder auf das Schließen-Symbol: Es wird ihm ein Laufzeitfehler vor den Latz geballert
Spätesten jetzt wird der Name des Programmierers mit einem Schimpfwort in Verbindung gebracht. Wenn der User gar auf DEBUGGEN (TESTEN) klickt, landet er in der VBA- Oberfläche!
Das alles sollte nicht sein!!! Und es muss auch nicht sein
Was ist zu tun?
Na klar, man muss vor dem Öffnen eine Mappe immer (!) prüfen, ob diese schon geöffnet ist. Falls dies der Fall ist wird diese nicht geöffnet, sondern direkt aktiviert.
Eine VBA-Lösung:
' Beispiel: C:\MAPPE2.XLS (richtig!) öffnen Dim bExists As Boolean Dim oWorkbook As Object ' Prüfen ob Datei bereits geöffnet ist bExists = False With Application For Each oWorkbook In .Workbooks If UCase$(oWorkbook.Name) = "MAPPE2.XLS" Then ' Jetzt aktivieren Windows(oWorkbook.Name).Activate bExists = True Exit For End If Next End With ' Mappe neu laden! If Not bExists Then On Error Resume Next Workbooks.Open Filename:="C:\MAPPE2.XLS", ReadOnly:=False On Error GoTo 0 End If
Und wie ist es in Word?
Der Befehl um in WinWord eine neue DOC-Datei zu öffnen ist sicher auch bekannt:
Documents.Open FileName:="C:\Dok2.doc"
Hier gibt es (bei mir zu mindestens) dieses Problem nicht. Word schaltet den Fokus ohne zu Meckern auf die Datei, die im Parameter FileName angegeben ist, um.