vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Excel   |   VB-Versionen: VBA21.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ölfelBewertung:  Views:  145.383 
ohne HomepageSystem:  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:

  1. Er klickt auf JA: Die bisherigen Änderungen in der bereits geladenen Mappe gehen verloren, die Mappe wird neu geladen!
  2. 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.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.