Aktionen beim Öffnen einer beliebigen Datei

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Aktionen beim Öffnen einer beliebigen Datei
von: Stefan Krähe
Geschrieben am: 02.03.2005 10:17:56
Hallo Excelperten,
ich möchte beim Öffnen einer beliebigen Datei ein Scipt prüfen lassen, ob diese Datei von mir ist und wenn ja, dann gewisse Anpassungen vornehmen lassen (Fußzeilen aktualisieren,...).
Um nicht in jede Mappe Makros einzufügen, denke ich über ein Add-In nach. Aber wie prüfe ich, ob gerade eine Mappe geöffnet wurde? Insbesondere müsste das Öffnen über den Windows-Explorer abgefragt werden können.
Geht das überhaupt ?
Danke für Eure Hilfe.
Stefan.

Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Bert
Geschrieben am: 02.03.2005 12:33:06
Kennst du dich mit Klassenmodulen aus? Das geht nur damit z.B. in deiner PERSONL.XLS
Da stehen die Ereignisse
Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
zur Verfügung.
Bert
Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Heiko S.
Geschrieben am: 02.03.2005 12:55:16
Hallo Stefan,
habe diesen link zum Thema gefunden,
http://www.mrexcel.com/archive2/40000/46338.htm
Den Code darin habe ich mir ein bisschen angepaßt und dann in meine PERSONL.xls geschrieben. Nun wird jedes öffnen (und schliessen) einer Datei erkannt. Man könnte das dann so erweitern das die Aktionen ausgeführt werden die du haben möchtetst.
Achtung, nenne dein Klassen modul Class1.

Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Jörg
Geschrieben am: 02.03.2005 13:13:32
Hallo Stefan, Hallo Heiko (Danke für den Hinweis!),
Das scheint wirklich ein ähnliches Problem zu sein wie bei mir.
Nun sind meine VBA Kenntnisse nicht so gut.
@Heiko: Welchen Code meinst Du bei deinem Link?
Die personl.xls wird dann immer mit geöffnet und muss auch wieder geschlossen werden?
Wäre dann ein AddIn nicht besser?
Gruß Jörg.
Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Stefan Krähe
Geschrieben am: 02.03.2005 13:31:01
Danke Bert, Danke Heiko.
Mit so schneller Antwort hatte ich gar nich gerechnet.
Der Frage von Jörg bezüglich des Add-Ins möchte ich mich anschließen.
Die Personl.xls hat m.E. den Nachteil, dass die nicht so einfach für mehrere Nutzer synchronisiert werden kann und bei der Script-Programmierung immer als geöffnete Datei beachtet werden muss.
Oder sehe ich das falsch ?
Gruß
Stefan
Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Heiko S.
Geschrieben am: 02.03.2005 15:50:10
Hallo Stefan,
deine erste Frage lautete
" ich möchte beim Öffnen einer beliebigen Datei ein Scipt prüfen lassen, ob diese Datei von mir ist und wenn ja, dann gewisse Anpassungen vornehmen lassen (Fußzeilen aktualisieren,...). "
Wenn dies auf jedem Rechner gehen soll, dann mußt du auf jedem Rechner ein AddIn installieren oder die entsprechende PERSONAL.xls anpassen. Empfinde ich als sehr aufwendig, wie willst du sicherstellen das auf allen Rechner auf denen dann mal deine Dateien geöffnet werden, das AddIn drauf ist.
Wenn das auf Dateien zutreffen soll die du mit deinem Rechner öffnest dann sollte es mit folgendem Code in deiner PERSONAL.xls gehen.
Denn die PERSONAL.xls wird immer zuerst geladen, wenn sie von dir erstellt wurde und sie ist solange offen wie du EXCEL geöffnet hast.
Folgenden Code dann in deine PERSONAL.xls.
In ein Klassenmodul mit dem Namen "Klasse1".
Option Explicit
Public WithEvents App As Application

Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
    MsgBox "Datei " & Wb.Name & " wurde geöffnet!", vbInformation
End Sub


Private Sub App_WorkbookDeactivate(ByVal Wb As Workbook)
    MsgBox "Datei " & Wb.Name & " wurde geschlossen!", vbInformation
End Sub

Dies in ein allgemeines Modul.
Option Explicit
Dim X As New Klasse1
Sub InitializeApp()
' Called by Workbook_Open
Set X.App = Application
End Sub
Dies in DieseArbeitsmappe.
Option Explicit

Private Sub Workbook_Open()
    Call InitializeApp
End Sub

Probiere es doch mal aus, bei mir wird nun jedes öffnen und schliessen einer Arbeitsmappe angezeigt. Denn Code kann man dann ja so anpassen das man bei den BuiltinDocumentProperties den Author abfragt und entsprechend handelt.
Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: Aktionen beim Öffnen einer beliebigen Datei
von: Jörg
Geschrieben am: 03.03.2005 07:12:51
Hallo Heiko,
ich habe das mal bei mir getestet, und es funktioniert, so wie Du es beschreibst.
Interessant ist, dass beim Öffnen einer anderen Datei als der personal.xls erst die personal.xls wieder geschlossen wird, und dann die meldung kommt, dass die andere geöffnet wird.
Wenn ich die msgboxen weglasse, müßte das ja im hintetrgrund passieren, so dass am ende tatsächlich die richtige datei auf ihren namen hin geprüft werden kann.
sollte klappen. Vielen dank.
gruß Jörg.
Bild

Betrifft: Achtung !!! personl.xls statt Personal.xls.
von: Heiko S.
Geschrieben am: 03.03.2005 07:40:09
Moin Jörg,
was ich nicht ganz verstehe bei dir ist der Hinweis:
"Interessant ist, dass beim Öffnen einer anderen Datei als der personal.xls erst die personal.xls wieder geschlossen wird, und dann die meldung kommt, dass die andere geöffnet wird."
Aber ich glaube, unseren Fehler erkannt zu haben.
Ich habe immer von Persoal.xls geschrieben, meine natürlich die Personl.xls die sogenannte persönliche Arbeitsmappe von EXCEL.

Wenn du da den Code reinschreibst, brauchst du dir um das starten der Mappe keine Gedanken mehr zu machen, die Personl.xls wird von EXCEL immer zuerst und automatisch beim starten von EXCEL mit geöffnet.
Wenn du im VBA Fenster keine Personl.xls siehst kannst du dir so eine erstellen.
Extras - Makro - Makro aufzeichnen
und unter Speicherort "Persönliche Arbeitsmappe" wählst.
Schreibt nun irgendein Makro auf, wirklich nur einmal Makrorekorder an irgendwo auf Blatt klicken und Makrorekorder wieder aus.
Nun siehst du im VBA Fenster hoffentlich die oft erwähnte Personl.xls. Im Modul1 ist der Code den du gerade aufgezeichnest hast. Den kannst du löschen und unseren Code darein packen, dann abspeichern EXCEL einmal neu starten und du wirst begeistert sein, na hoffentlich :-)

Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Jörg
Geschrieben am: 03.03.2005 07:54:32
Hallo Heiko,
wir schreiben jetzt nur noch hier, okay?
Also, ich habe das alles so gemacht, und Du hast natürlich recht. Jetzt merke ich das Starten und Schließen der personl.xls nicht mehr.
Trotzdem funktioniert die If-Anweisung noch nicht.
Hier nochmal der Code im Klassemodul1:
Option Explicit
Public WithEvents App As Application


Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
    If Wb.Name = "MeineDatei.xls" Then MsgBox "Sie ist es" Else MsgBox "Datei " & Wb.Name & " wurde geöffnet!", vbInformation
End Sub



Private Sub App_WorkbookDeactivate(ByVal Wb As Workbook)
    MsgBox "Datei " & Wb.Name & " wurde geschlossen!", vbInformation
End Sub

Springt Dir doch bestimmt sofort ins Auge, oder :-)
Gruß Jörg.
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Heiko S.
Geschrieben am: 03.03.2005 08:06:14
Is noch früh,

aber wenn du nun die Personl angelegt hast dann ersetze den ganzen Code im Klassenmodul mit dem folgendem. Den das WorkbookActivate Ereignis reagiert auf aktivieren und das WorkbookOpen nur auf das öffnen der Datei!
Option Explicit
Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    If UCase(Wb.Name) = UCase("MeineDatei.xls") Then
        MsgBox "Sie ist es"
    Else
        ' Verhindert die Meldung bei öffnen der Personl.xls
        If UCase(Wb.Name) <> UCase("Personl.xls") Then
            MsgBox "Datei " & Wb.Name & " wurde geöffnet!", vbInformation
        End If
    End If
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: Morgenstund hat Gold im Mund
von: Jörg
Geschrieben am: 03.03.2005 08:15:23
Super Heiko,
jetzt scheint wirklich alles zu klappen.
Dann mache ich mich mal weiter ans Werk.
Der Rest sind einfache Formatierungsarbeiten per Makro, das sollte ich hinbekommen.

Vielen Dank, Gruß Jörg.
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Stefan
Geschrieben am: 03.03.2005 08:26:50
Hallo Heiko,
vielen Dank für Deine Beiträge. Ich habe Eure Diskussion nachvollzogen, allerdings bin ich nicht immer so schnell im Antwort-Mailen.
Bei mir funktioniert es auch. Allerdings habe ich zwei unschöne Effekte:
(1) Wenn Dateien über Scripte geöffnet werden, dann erhalte ich ebenfalls die Meldung.
(2) Wenn ich neue Dateien anlege, dann erhalte ich keine Meldung.
Vielleicht hast Du ja dafür auch eine schnelle Lösung.
Danke.
Stefan.
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Heiko S.
Geschrieben am: 03.03.2005 09:00:07
Hallo Stefan,
zu 1.
Vor dem öffnen per makro die Application Events abschalten. Aber Achtung dieser Befehl schaltet auch gleich die Nachfrage Makros aktivieren mit ab und die Makros werden aktiviert.

Application.EnableEvents = False
Workbooks.Open Application.GetOpenFilename
Application.EnableEvents = True
zu 2.
zusätzlich ins Klassenmodul.

Private Sub App_NewWorkbook(ByVal Wb As Workbook)
    MsgBox "Es wurde eine neue Mappe mit dem Namen   " & Wb.Name & "   angelegt!"
End Sub


Gruß Heiko
PS: Rückmeldung wäre nett
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Stefan Krähe
Geschrieben am: 03.03.2005 08:49:34
Hallo Heiko,
hier zwei Fragen:
(1) Wenn ich eine zweite Excel-Sitzung öffne, erhalte ich die Meldung, dass die Personl.xls durch den Beutzer ... (mich) gesperrt ist und ob ich diese schreibgeschützt öffnen möchte. Wie verhindere ich dies?
(2) In Deinem Code hast Du die "Set X.App = Application" in Modul1 gesetzt. Warum ruft man diesen Befehl nicht gleich in diese Arbeitsmappe auf?
Gruß Stefan.
Bild

Betrifft: AW: Achtung !!! personl.xls statt Personal.xls.
von: Heiko S.
Geschrieben am: 03.03.2005 09:08:21
Zu 1.
Warum öffnet du EXCEL zweimal ?! Um das zu umgehen müsstest du mit AddIns arbeiten. Soll Abhilfe schaffen, habe ich aber noch nicht getestet.
Zu 2.
Teste doch mal ob das alles auch in DieseArbeitsmappe geht, in entsprechender Literatur wird es jedenfalls oft so wie gezeigt gemacht.
Und nun fröhliches selbst probieren.
Gruß Heiko
Bild

Betrifft: Hilfreicher [oder verwirrender :-o)) ] Link
von: Heiko S.
Geschrieben am: 03.03.2005 09:22:31
Hier noch als kleiner Tipp, ein Link zu Microsoft. Auf der Seite könnt ihr nachlesen welche Ereignisse es alles im Application Objekt gibt.
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/dv_wrcore/html/wrgrfexcelapplicationobjectevents.asp
Gruß Heiko
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Aktionen beim Öffnen einer beliebigen Datei"