Anzeige
Archiv - Navigation
1308to1312
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
Inhaltsverzeichnis

Workbook_open() Pendant?

Workbook_open() Pendant?
24.04.2013 16:59:04
JACKD
Hallo Gemeinde
Ich versuch mich grad an einem Addin,
Das sieht auch schon "ganz gut aus" (im Rahmen meiner Möglichkeiten)
Nun zu meiner Frage,
wie bekomme ich es hin, dass (eine aktivierung des Makros vorrausgesetzt) bei dem Start einer neuen Mappe das Addin "los-läuft" sprich die GUI ändert?
den Text zum ändern hab ich schon, läuft auch genau so wie ich das wollte, aber eben nicht automatisch.
Der befehl workbook_open hat mich auf jeden fall nicht nach vorn gebracht -.-
thanks in advance
Grüße

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook_open() Pendant?
24.04.2013 17:07:05
mumpel
Hallo!
Dafür musst Du eine Klasse im Add-In hinzufügen. Stichwort App_WorkbookOpen.
Gruß, René

AW: Workbook_open() Pendant?
24.04.2013 17:14:08
JACKD
Hallo Mumpel
Vielen Dank für die Antwort.
dA WERD ICH MICH WOHL MAL IN Klassen reinlesen dürfen .. doch dazu morgen =)
Grüße
Und vielen Dank

Das wäre noch der einfachste Fall! ;-) Gruß owT
25.04.2013 00:35:52
Luc:-?
:-?

Wie meinst das Luc? owt
25.04.2013 08:53:29
JACKD
..

AW: Wie meinst das Luc? owt
25.04.2013 09:35:51
Nepumuk
Hallo,
Luc? schreibt des Öfteren Beiträge ohne irgendeinen ersichtlichen Wert. Wahrscheinlich nur, damit sein Name in der Forenliste auftaucht. Ich habe aber keine Ahnung welcher Defekt in dazu treibt.
Gruß
Nepumuk

Anzeige
:-D
25.04.2013 10:18:01
JACKD
Das ist mal ne Aussage =)

Ja, aber völlig idiotisch, weil die ...
25.04.2013 13:29:53
Luc:-?
…hier gemeinten Zusammenhänge einem Profi eigentlich klar sein sollten! Das Klassenmodul für Application ist standardmäßig bereits vorbereitet, aber nur nicht installiert. Deshalb!
Und Nepumuk, dir muss ich sagen, dass auch ein Profi wie du nicht alles weiß und deshalb mitunter jemand, der nach deiner hier unmaßgeblichen Meinung „des Öfteren Beiträge ohne irgendeinen ersichtlichen Wert“ schreibt, genau so etwas wissen kann. Für manches braucht's halt Kreativität und nahezu wissenschaftliche Akribie, dass lernt man nicht unbedingt in Pgmierkursen. ;->
Und du Jack, halt dich lieber zurück. Um wirklich mitreden zu können, hast du zu wenig Ahnung! :-/
Und im Übrigen habe ich es ganz bestimmt nicht nötig, dass mein NName andauernd im Forum zu finden ist — andere finden sich wesentl häufiger. Ich habe Besseres zu tun, nämlich Dinge, auf die ProfiPgmierer anscheinend nicht kommen, da sie ja ganz normal sind und keinen „Defekt“ haben… :->>
Luc :-?

Anzeige
Halt mal
25.04.2013 13:38:23
JACKD
Ich weiß nicht was dich geritten hat, aber du hast meinen Kommentar sicher nur nicht verstanden.
Ich hab die Aussage kommentiert, aber nicht bewertet.
Daher, ungeachtet der Tatsache, dass ich mit Sicherheit und mit Abstand nicht so viel weiß finde ich es sagen wir mal "unpolite" du eine derartige Äusserung triffst.
Zumal ich in keinster Weise dein Wissen in Frage gestellt hab. Im Gegenteil, ich hab dich nach deiner ersten Äußerung gefragt was ich darunter verstehen kann (weil ich eben nicht so viel weiß)
So ich muss jetzt erstmal eine Rauchen...

So etwas ist auch eine Aussage:
25.04.2013 13:53:18
Luc:-?
Zitat: Das ist mal ne Aussage =)
Zumal sie den Eindruck erweckt, dem Vorredner zustimmen zu wollen!
Luc :-?
PS: Hoffe, dass nicht -? dich „in dein(en) LKW“ getrieben hat… ;-]

Anzeige
LKW
25.04.2013 14:05:49
JACKD

PS: Hoffe, dass nicht -? dich „in dein(en) LKW“ getrieben hat… ;-]

hat bissl gedauert, aufgrund des Fehlenden Namens, aber dann hab ich dich dennoch verstanden.
Und, aber ja, hat -?.
Zumal sie den Eindruck erweckt, dem Vorredner zustimmen zu wollen!

Sicherlich lässt die (meinige) Aussage Interpretationsspielraum. Daher: Man reiche mir einen Schwamm
In diesem Sinne Danke für deine Hilfe

Na, dann iss ja jut... ;-) owT
25.04.2013 14:34:51
Luc:-?
:-?

AW: Ja, aber völlig idiotisch, weil die ...
25.04.2013 14:11:50
Nepumuk
Hallo Luc?,
Das Klassenmodul für Application ist standardmäßig bereits vorbereitet, aber nur nicht installiert.
Hääääääää?
Das Application-Objekt hat eine ActiveX-Schnittstelle über die dessen Events abgefangen werden können. Das ist doch kein Klassenmodul sondern nur ein Möglichkeit.
Gruß
Nepumuk

Anzeige
Wenn ich das einrichte, habe ich auch alle ...
30.04.2013 04:52:45
Luc:-?
…vorgesehenen Events zV und darauf kam's mir an, Nepumuk;
außerdem stand das mal irgendwann in der Hilfe so oder ähnlich, aber natürlich nicht wie MS das konkret realisiert. Aber viell hat sich das ja inzwischen geändert!
Gruß Luc :-?

Wie das zu machen ist, steht unter Xl12 ...
30.04.2013 15:10:04
Luc:-?
…immer noch in der VBE-Hilfe, unter „Verwenden von Ereignissen mit dem Application-Objekt“!
Luc :-?

Also ich seh da nicht durch
25.04.2013 11:55:04
JACKD
Könnte mir jemand helfend unter die Arme greifen?
Grüße

AW: Also ich seh da nicht durch
25.04.2013 12:13:05
Nepumuk
Hallo,
ein Beispiel:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private mobjApplicationClass As clsApplication

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set mobjApplicationClass = Nothing
End Sub

Private Sub Workbook_Open()
    Set mobjApplicationClass = New clsApplication
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub DeinMakro(ByRef probjWorkbook As Workbook)
    MsgBox probjWorkbook.Name
End Sub

' **********************************************************************
' Modul: clsApplication Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjApplication As Application

Private Sub Class_Initialize()
    Set mobjApplication = Application
End Sub

Private Sub Class_Terminate()
    Set mobjApplication = Nothing
End Sub

Private Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
    If Not Wb Is ThisWorkbook Then Call DeinMakro(Wb)
End Sub

Gruß
Nepumuk

Anzeige
I only understand TRAINSTATION =)
25.04.2013 12:59:50
JACKD
Hallo Nepumuk
Vielen Dank für dein Beispiel.
Wie zu erwarten gerate ich ziemlich schnell an meine Grenzen :-D
So versuch ich mich, wenn du mir hilfst, mich langsam dem Problem zu nähern ..
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
Option Explicit
Private mobjApplicationClass As clsApplication
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set mobjApplicationClass = Nothing
End Sub
Private Sub Workbook_Open()
Set mobjApplicationClass = New clsApplication
End Sub
Hier wird das Verhalten beim öffnen und schliessen der Mappe definiert?
also beim schliessen wird die variable"Entsettet" (wie Peter Hasserod in seinem Forum schreibt)
und beim öffnen wird variable gesetzt bzw. besetzt mit der Klasse
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
Option Explicit
Public Sub DeinMakro(ByRef probjWorkbook As Workbook)
MsgBox probjWorkbook.Name
End Sub
allgemeiner Code.. ohne besondere Merkmale? oder muss ich hier mittels byref die Mappe "übergeben"?
Ab hier wirds jetzt richtig Spannend
' **********************************************************************
' Modul: clsApplication Typ: Klassenmodul
Option Explicit
Private WithEvents mobjApplication As Application
Private Sub Class_Initialize()
Set mobjApplication = Application
End Sub
Private Sub Class_Terminate()
Set mobjApplication = Nothing
End Sub
Private Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
If Not Wb Is ThisWorkbook Then Call DeinMakro(Wb)
End Sub
In diesem Block steige ich nun grad gar nicht mehr durch ...
Aber ich glaub das ist ja der eigentlich entscheidende...
Könntest du mir das mal in "Befehlsdeutsch" übersetzen? =)
Thanks in advance

Anzeige
AW: I only understand TRAINSTATION =)
25.04.2013 13:17:52
Nepumuk
Hallo,
das ist doch ganz einfach.
Option Explicit

'Deklaration der Variablen die das Objekt enthält dessen Ereignisse (Events) abgefangen werden sollen
Private WithEvents mobjApplication As Application

Private Sub Class_Initialize()
    
    'der Objektvariablen das Objekt (diese Excelinstanz) übergeben
    Set mobjApplication = Application
    
End Sub

Private Sub Class_Terminate()
    
    'die Objektvariable zurücksetzen
    Set mobjApplication = Nothing
    
End Sub

'Event welches beim Öffnen einer Mappe in dieser Excelinstanz ausgelöst wird
Private Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
    
    'wenn es nicht das eigene Open-Event ist dann rufe eine Prozedur auf
    If Not Wb Is ThisWorkbook Then Call DeinMakro(Wb)
    
End Sub

Gruß
Nepumuk

Anzeige
AW: I only understand TRAINSTATION =)
25.04.2013 13:23:50
JACKD
Hallo 0Nepumuk
Vielen Dank..
Ich habs zwar noch nicht in seiner gänze verstanden, aber ich probier es jetzt erstmal mit deinem (ohne meins einzupflegen) und schaue was passiert =)
Hab noch viel, sehr viel nachholbedarf =)
Grüße

Deines macht auch nix?
25.04.2013 13:30:55
JACKD
Also nochmal ich =)
Ich hab jetzt deinen Quelltext sauber eingefügt.
Die Klasse umbenannt alsw addin gespeichert, und das addin eingebunden.
Eine Neue Mappe geöffnet und nun sollte doch ne Msgbox kommen oder?
Tut sie aber nicht -.-
Hab ich was vergessen?

AW: Deines macht auch nix?
25.04.2013 13:38:54
Nepumuk
Hallo,
das Event reagiert auf das öffnen einer vorhandenen Mappe, nicht auf das einer neuen Mappe. Das geht auch, ist aber ein anderes Ereignis.
Gruß
Nepumuk

Anzeige
Asche auf mein Haupt
25.04.2013 13:41:18
JACKD
Es funktioniert natürlich. Sowohl dein Ursprung als auch "meine" Anpassung.
Ich weiß allerdings nicht warum..
Also wieso es erst läuft, nachdem ich einmal eine bereits gespeicherte Mappe aufgerufen hab..?

AW: Asche auf mein Haupt
25.04.2013 13:46:48
Nepumuk
Hallo,
na weil das "öffnen" einer neuen Mappe diese Ereignis auslöst:
Private Sub mobjApplication_NewWorkbook(ByVal Wb As Workbook)
    Call DeinAnderesMakro(Wb)
End Sub

Ist doch toll dass du zwischen vorhandenem und neuen Workbook unterscheiden kannst, ohne z.B. die Path-Eigenschaft der Mappe abfragen zu müssen.
Gruß
Nepumuk

Anzeige
AW: Asche auf mein Haupt
25.04.2013 14:00:27
JACKD
Ist ja witzig..
Also ich dachte einfach Trial on Error und hab diese Sub jetzt hinzugefügt. Und siehe da es funktioniert.
Aber wieso?
Woran erkennt der in der Befehlszeile, dass es sich um ein neues WB handelt?
Manchmal möchte ich mich auch selbst schlagen...
hab eine Anpassung der Excel GUI "vorgenommen" und hab in der Referenz auf das gleiche Sub verwiesen statt auf das eigentliche Makro.
Hatte zur folge, dass sich die schaltfläche immer und immer wieder repliziert hat.
-.-

AW: Asche auf mein Haupt
25.04.2013 14:15:23
Nepumuk
Hallo,
weil das die Programmierer der Schnittstelle so festgelegt haben. Warum, das musst du die Programmierer bei Microsoft fragen.
Alle Events findest du in der rechten Combobox über dem Codefenster.
Gruß
Nepumuk

AW: Asche auf mein Haupt
25.04.2013 14:24:25
JACKD
Dann sollt ich die mal fragen gehen :-D

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige