Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
628to632
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
628to632
628to632
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Beim Öffnen Workbook_Open()-Ereignis abfangen

Beim Öffnen Workbook_Open()-Ereignis abfangen
02.07.2005 16:41:00
Matthias
Hallo Excelfans,
Ich habe ein relativ umfangreiches Projekt und möchte diesem eine eigene Excel-Instanz zugestehen. Dazu öffne ich es mit einem kurzen VB-Programm, welches das Kennwort zum Öffnen gleich mitgibt und die Makro-Sicherheitseinstellung übergeht (Dank nochmal an Nepumuk).
Um zu verhindern, dass aus dem Explorer fremde Excel-Dateien in der gleichen Excel-Instanz geöffnet werden, verwende ich folgenden Code:

Private Sub Workbook_Deactivate()
Dim n As String
If Workbooks.Count > 1 Then
Application.EnableEvents = False
With ActiveWorkbook
n = .FullName
.Close savechanges:=False
End With
Application.EnableEvents = True
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
On Error Resume Next
xlApp.Workbooks.Open Filename:=n
If Err.Number > 0 Then
xlApp.Quit
Else
xlApp.Application.Visible = True
End If
Set xlApp = Nothing
End If
End Sub

Der Code prüft beim Deaktivieren der Mappe, ob eine neue Mappe geöffnet wurde (Anzahl offener Mappen), schließt diese und öffnet sie anschließend in einer neuen Instanz. Das funktioniert soweit auch ganz gut.
Einziges Problem ist, das die evtl. vorhandene Workbook_Open()-Prozedur der fremden Mappe dabei zweimal ausgeführt wird (beim ersten Öffnen sowie beim erneuten Öffnen in einer neuen Instanz).
Nun hab ich mich ein wenig in Klassenprogrammiereung eingelesen: http://www.online-excel.de/excel/singsel_vba.php?f=51 (schon wieder ein Tip von Nepumuk in einem Thread weiter unten ;-) und frage mich nun, ob es möglich ist, das Öffnen fremder Mappen zu verhindern, ohne dass die Workbook_Open()-Prozedur der neu geöffneten Mappe ausgeführt wird.
In meinen Tests wird diese nämlich vor allen anderen Klassenevents (z.B. App_WorkbookOpen() ) ausgeführt, und somit habe ich scheinbar keine Chance, das Ausführen (ich dachte an EnableEvents = False) zu verhindern.
Weiß da vielleicht jemand Rat oder kann mir definitiv sagen: nee, vergiss es, nicht möglich?
Gruß Matthias

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beim Öffnen Workbook_Open()-Ereignis abfangen
02.07.2005 17:17:17
Jan
Hi,
versuchs mal so(ungetestet):

Private Sub Workbook_Deactivate()
Dim n As String
If Workbooks.Count > 1 Then
Application.EnableEvents = False
With ActiveWorkbook
n = .FullName
.Close savechanges:=False
End With
Application.EnableEvents = True
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
xlApp.EnableEvents = False
On Error Resume Next
xlApp.Workbooks.Open Filename:=n
If Err.Number > 0 Then
xlApp.Quit
Else
xlApp.Application.Visible = True
xlApp.EnableEvents = True
End If
Set xlApp = Nothing
End If
End Sub

mfg Jan
Anzeige
AW: Beim Öffnen Workbook_Open()-Ereignis abfangen
02.07.2005 17:30:26
Matthias
Hallo Jan,
hmm, stimmt, so wird z.B. ein Userform nur einmal angezeigt. Probleme ergäben sich allerdings mit Mappen, die zwingend beim Öffnen einen best. Code ausführen müssen. Denn dass dieser in der anderen Instanz schon mal gelaufen ist, hat Excel ja längst vergessen bzw. gar nicht mitbekommen ;-)
Danke jedenfalls für die Antwort - ich stell mal wieder auf offen, falls noch jemand 'ne Idee hat.
Grüße,
Matthias
AW: Beim Öffnen Workbook_Open()-Ereignis abfangen
02.07.2005 19:25:01
Jan
Hi,
wenn ich das richtig verstehe, brauchst du nur abzufragen, ob workbook n geschlossen wurde und wenn nicht, die Events zulassen ansonsten disabeln.
mfg Jan
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige