Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
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

AddIn Workbook_Open - Fehler

AddIn Workbook_Open - Fehler
27.01.2015 21:04:55
Dirk
Hallo liebe, unermüdliche Helfer,
mit meinen laienhaften xl-Kenntnissen habe ich mir 2 Makros gebastelt (mittels Recherche hier im Archiv). Beide funktionieren einwandfrei.
Da ich diese beiden Makros nun aber nicht in jede Datei extra reinkopieren möchte (unter: DieseArbeitsmappe), speicherte ich eine ansonsten leere xlsx-Datei als AddIn im xlam-Format ab...
Nun erscheint beim Öffnen jeder xl-Datei od. auch einer leeren Mappe folgende Fehlermeldung:
Laufzeitfehler 91:
Objektvariable oder With-Blockvariable nicht festgelegt
Klicke ich auf Debuggen wird die Zeile
fn = "d:\zw\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)...
gelb markiert u. es kommt die Meldung:
Code kann im Haltemodus nicht ausgeführt werden.
Wo liegt der Fehler?
Option Explicit ' Variablendefinition erforderlich
Private Sub Workbook_Open()
Dim aw As String
Dim fn As String
Const bytZeit As Byte = 3   'hier die Zeit für die Sichtbarkeit der MsgBox einstellen
Dim objWSH As Object
Dim intMSG As Integer   'wichtig für die Zeit der Sichtbarkeit der MsgBox
fn = "d:\zw\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & "---" & Format(Now, " _
YY-MM-DD") & "_" & Format(Now, "hh-mm") & ".xlsm"
aw = MsgBox("Soll eine Sicherungskopie erstellt werden?", vbQuestion + vbYesNoCancel)
If aw = vbCancel Then
ActiveWorkbook.Close False
End If
If aw = vbYes Then
On Error Resume Next
ActiveWorkbook.SaveCopyAs fn
If Err.Number > 0 Then
MsgBox Err.Description, vbCritical, "FEHLER!"
Err.Clear
aw = vbNo
Else
Set objWSH = CreateObject("WScript.Shell")
intMSG = objWSH.Popup("Datei wurde erfolgreich gespeichert unter:" & vbCr _
& vbCr _
& fn & vbCr, bytZeit, "H I N W E I S ...")
Set objWSH = Nothing
End If
On Error GoTo 0
End If
If aw = vbNo Then
Set objWSH = CreateObject("WScript.Shell")
intMSG = objWSH.Popup("Es wurde keine Sicherungskopie erstellt!" & Space(10), bytZeit, " _
Warnung...")
Set objWSH = Nothing
End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim SaveAsUI As Boolean
Dim aw2 As String
Const strPfadArchiv As String = "D:\zw2\" 'Archiv-Verzeichnis-anpassen!!
aw2 = MsgBox("Soll eine Sicherungskopie für das NETZWERK erstellt werden?" & vbCr _
& vbCr _
& "(  Zu finden unter:" & vbCr _
& Space(5) & strPfadArchiv & "  )", vbQuestion + vbYesNo)
If aw2 = vbNo Then
Exit Sub
End If
If aw2 = vbYes Then
ActiveWorkbook.SaveCopyAs strPfadArchiv & ActiveWorkbook.Name
End If
End Sub

Kann mir jemand helfen - bin echt am Verzweifeln.
Gruß Dirk C.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: AddIn Workbook_Open - Fehler
27.01.2015 21:33:03
mumpel
Hallo!
Wenn der Code in allen Arbeitsmappen gelten soll benötigst Du eine Klassenprogrammierung (Google und Forenarchiv bemühen). So wie es jetzt ist wird es jedenfalls nicht mit der globalen Nutzung der Ereignismakros.
Gruß, René

AW: AddIn Workbook_Open - Fehler
27.01.2015 21:54:08
Dirk
Hallo René,
mit einer Klassenprogrammierung bin ich total überfordert...
Ist das sehr aufwändig oder könntest du mir da etwas "zaubern" ?
Gruß Dirk C.
P.S.: Der 2. Teil (also die 2. Sub) funktioniert nach dem Beenden des Debuggens ohne jegliche Änderung auch schon jetzt wie gewünscht.

Das ist in diesem Fall nicht so schwer, ...
28.01.2015 01:30:42
Luc:-?
…Dirk,
das wird in der VBE-Hilfe erklärt, denn es geht hier ja wohl um die Ereignisse der Application (Xl), die bereits festgelegt sind. Man muss also nur noch das entsprd KlassenModul anlegen und einbinden, dann stehen diese Ereignisse zV. Genau das wird in der VBE-Hilfe mit/am Bsp erklärt.
Morrn, Luc :-?
Besser informiert mit …

Anzeige
AW: Das ist in diesem Fall nicht so schwer, ...
28.01.2015 16:41:51
Dirk
Hallo Luc,
wie gesagt: "mit einer Klassenprogrammierung bin ich total überfordert..."
Habe hier schon rumgestöbert u. auch bei Peter Hasserodt nachgelesen, aber ich kriege es einfach nicht hin.
Leider hat René nicht mehr geantwortet.
Aber vllt. hast ja du Zeit u. Lust, dieses Problem zu lösen?
Bitte verstehe meine Bitte nach einer fertigen Lösung nicht als ausverschämt (s. Forum-Etikette), aber ich persönlich (blutiger VBA-Anfänger) lerne so am Besten. Meinen bisherigen Code habe ich hier aus dem Archiv zusammengebastelt, verstehe ihn immer besser, Klassen sind aber immernoch ein Buch mit 7 Siegeln.
Solltest du kein weiteres Interesse haben, so möchte ich dir trotzdem für deinen Tipp danken.
mfg Dirk

Anzeige
In der VBE-Hilfe steht dazu Folgendes, ...
28.01.2015 22:39:07
Luc:-?
Dirk
Verwenden von Ereignissen mit dem Application-Objekt
Bevor Sie ein Ereignis mit dem Application-Objekt verwenden können, müssen Sie ein Klassenmodul erstellen und für Ereignisse ein Objekt vom Typ Application deklarieren. Nehmen Sie beispielsweise an, dass ein neues Klassenmodul erstellt wird, das EventClassModule heißt. Das neue Klassenmodul enthält den folgenden Code:
Public WithEvents App As Application
Nachdem das neue Objekt mit Ereignissen deklariert wurde, wird es im Klassenmodul im Dropdownlistenfeld Objekt angezeigt, und Sie können Ereignisprozeduren für das neue Objekt schreiben. (Wenn Sie das neue Objekt im Feld Objekt auswählen, werden die gültigen Ereignisse für dieses Objekt im Dropdownlistenfeld Prozedur angezeigt.)
Bspw kann dieses angelegt wdn:
Private Sub App_WorkbookOpen(ByVal wb As Workbook)
If wb.Name  ThisWorkbook.Name Then
'… Anm: This… bezieht sich hier auf das AddIn! _
font>
End If
End Sub
Bevor die Prozeduren ausgeführt werden können, müssen Sie jedoch das deklarierte Objekt im Klassenmodul mit dem Application-Objekt verbinden. Sie können dazu in allen Modulen (zB dem DokumenKlassenModul der AddIn-Arbeitsmappe) den folgenden Code verwenden.
Beispiel
Dim X As New EventClassModule
Sub InitializeApp()
Set X.App = Application
End Sub
Nachdem die InitializeApp-Prozedur ausgeführt wurde, zeigt das App-Objekt im Klassenmodul auf das Application-Objekt von Microsoft Excel, und die Ereignisprozeduren im Klassenmodul werden ausgeführt, wenn die Ereignisse auftreten.
Anmerkung: Dunkelrote Einfügungen sind von mir!
Gruß, Luc :-?

Anzeige
AW: In der VBE-Hilfe steht dazu Folgendes, ...
29.01.2015 01:05:28
Dirk
Hallo Luc,
vielen Dank für deine ausführliche Anleitung.
Aber anscheinend bin ich zu blöd: Habe mE exakt danach ein AddIn gebastelt (zu Testzwecken zunächst abgespeckt), aber ich komme einfach nicht klar.
Es tut sich NIX u. ich reisse mir gleich die Haare aus.
Kannst du bitte nochmal drüberschaun?
https://www.herber.de/bbs/user/95376.xlsm
Im Voraus tausend Dank!
mfg Dirk

Das fktioniert aber, ...
29.01.2015 05:41:46
Luc:-?
…Dirk,
wenn man es so macht wie nachfolgd und dabei App bei jedem AddIn-Start, der automatisch bei Xl-Start erfolgt, wenn man das AddIn in die aktiven AddIns einbindet, initialisiert. Das geht aus der VBE-Hilfe nicht so recht hervor, aber InitializeApp muss erst mal gelaufen sein, damit das auch erkannt wird. Im Übrigen hattest du doch nicht alles so gemacht wie in der Anleitung. Aber vgl selbst…
Die internen CodeNamen eines AddIns sollten stets geändert wdn, sonst kann ggf später nicht von anderen VBA-Projekten aus auf das AddIn verwiesen wdn (wg Namensgleichheit der StandardNamen). Das ist nämlich erforderlich, wenn du im AddIn Prozeduren speicherst, die du in anderen VBA-Projekten nutzen willst. Für UDFs in ZellFmln ist das aber nicht erforderlich.
Ich habe deshalb ff Namen des AddIns geändert:
VBAProjectWbOpenAddIn
DieseArbeitsmappeWbOpMap
Tabelle1WbOpTab
Außerdem sollte der Wert der WbOpMap/Workbook-Eigenschaft IsAddIn auf True gesetzt wdn, damit es als solches erkannt und mit der DateiTypEndung .xlam (oder .xlab) gespeichert wird. Es wird dann stets im HGrd verborgen geöffnet.
Im DokKlassenModul WbOpMap:
Option Explicit
Dim WbOpen As New EventClassModule
Sub InitializeApp()
Set WbOpen.App = Application
End Sub
Private Sub Workbook_Open()
Call InitializeApp
End Sub
Falls noch mehr beim Öffnen des AddIns geschehen soll, kannst du das nach der bereits vorhandenen AufrufZeile einfügen.
Im EventClassModule:
Option Explicit
Public WithEvents App As Application
Const strPfadArchiv As String = "D:\zw\"    'Anm: Archiv-Verzeichnis-anpassen!!
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If Wb  ThisWorkbook Then 'Anm: This… bezieht s. aufs AddIn, um's auszuschließ!
        MsgBox "Hier kommt der SaveCopyAs-Code für " & strPfadArchiv, , Wb.Name
'        Wb.SaveCopyAs strPfadArchiv & Wb.Name
End If
End Sub
Alles weitere, also auch die gewünschte Fktionalität hängt dann von der Richtigkeit deiner FolgeBefehle ab.
Morrn, Luc :-?

Anzeige
AW: In der VBE-Hilfe steht dazu Folgendes, ...
29.01.2015 05:01:11
Dirk
Guten Morgen Luc,
habe meinen Denkfehler wohl gefunden (hoffentlich hast du noch nicht an meiner vorigen Nachricht gearbeitet)- ist aber immernoch ein Ratespiel mit den Klassen.
Nun läuft die Open-Routine super durch u. ich war so dreist zu versuchen, auch die Close-Routine in dieses AddIn einbinden zu wollen. Jetzt habe ich mich total festgefahren u. wäre dir sehr dankbar, wenn du dir das mal ansehen könntest.
https://www.herber.de/bbs/user/95378.xlsm
mfg Dirk

AW: AddIn Workbook_Open - Fehler
27.01.2015 21:57:34
Ralf
Hallo,
ich habe versucht es nachzuvollziehen.
Hast du das AddIn per Verweis an die entsprechenden Mappen gebunden?
So habe ich es probiert und es klappt, habe keinen Fehler entdeckt.
Allerdings habe ich MSO2003 hier.
Gruß
Ralf

Anzeige
AW: AddIn Workbook_Open - Fehler
27.01.2015 22:46:55
Dirk
Hallo Ralf,
ich bin erst kürzlich auf MSO2010 umgestiegen und die Option mit den Verweisen habe ich hier noch gar nicht gefunden. (Gibt es das hier noch od. wie heißt das jetzt?)
Ich habe via Entwicklertools / AddIns nur ein Häkchen bei "meinem" AddIn gesetzt...
Aber trotzdem vielen Dank für deine Anregung.
Gruß Dirk C.

AW: AddIn Workbook_Open - Fehler
27.01.2015 22:51:53
Ralf
Vba editor, verweise..
Denn werden die Makros dort drin aber bei jeder Datei ausgeführt? Und das ist erwünscht?
Ralf

AW: AddIn Workbook_Open - Fehler
27.01.2015 23:23:03
Dirk
Hallo Ralf,
unter VBA-Editor / Extras / Verweise habe ich gerade nachgesehen.
Hier kann ich aber nicht die von mir erstellte .xlam-Datei finden.
Muß die an einem bestimmten Ort gespeichert werden, damit sie hier aufgeführt wird?
Kann eigentlich nicht sein, denn in dieser endlosen Liste stehen unterschiedlichste Dateiformate aus unterschiedlichsten Speicherorten drin...
Danke aber für den Tipp - nun weis ich, wo ich die Verweise in den neuen Menüs finden kann.
Zitat: Und das ist erwünscht?
Ja, eigentlich schon. Eine andere Lösung fällt mir leider nicht ein...
Gruß Dirk C.

Anzeige
AW: AddIn Workbook_Open - Fehler
28.01.2015 05:42:56
Ralf
Hallo Dirk,
Dort kannst du arbeitsmappen abhängige verweise anlegen, indem du eine Datei hinzufügst. Die Datei wird immer mitgeladen und deren Projekte stehen zur Verfügung.
Im Gegensatz dazu stehen addins jeder Datei zur Verfügung.
Andere Lösung wäre bspw. Nur auf netzlaufwerken arbeiten und Server sichert selbst die Daten.
Gruß
Ralf

AW: AddIn Workbook_Open - Fehler
28.01.2015 18:13:06
Dirk
Hi Ralf,
diese Vorschläge sind sehr interessant.
Momentan schlage ich mich noch mit allerhand Fehlermeldungen rum - Namenskonflikte etc. - beim Einrichten eines Verweises.
Aber ich glaube, das führt nicht zu dem Ergebnis wie ich es mir eigentlich vorstelle - durch den Verweis werden doch bestimmt keine Ereignisse ausgelöst, oder ?
Mein Ziel ist es, beim Öffnen eine Kopie im Verzeichnis A u. beim Schliessen im Verzeichnis B zu erstellen (wahlweise per manueller Bestätigung) und das ohne jeglichen Code in der betreffenden Datei.
mfg Dirk

Anzeige
AW: AddIn Workbook_Open - Fehler
28.01.2015 18:34:49
Ralf
Hallo Dirk,
ich arbeite selbst noch nicht mit, habe es erst ausprobiert, als du gefragt hattest. Auch deshalb, weil ich so was bei meinem nächsten Projekt auch nutzen möchte.
Momentan schlage ich mich noch mit allerhand Fehlermeldungen rum - Namenskonflikte etc. - beim Einrichten eines Verweises.
Ich glaube mumpel war es, der erwähnte, dass in der Datei, die als Verweis eingebunden wird, das Projekt umbenannt werden muss, damit es zu keinem Namenskonflikt kommt. Klick im VBA im Projekt-Explorer auf den Dateinamen, VBAProjekt umbennen nach irgendwas. DieseArbeitsmappe habe ich auhc umbenannt, ob das nötig ist, weiß ich nicht.
durch den Verweis werden doch bestimmt keine Ereignisse ausgelöst, oder ?
Doch, genau das ist das schöne. Probiere es mal aus, indem du im verweis und in der datei jeweils im workbook_open() ein STOP als erste zeile einfügst.
ohne jeglichen Code in der betreffenden Datei.
Genau das ist Ziel dieses/meines Ansinnens.
Melde ruhig deiner Erkenntnisse zurück, wird uns beiden helfen.
Evtl. im neuen Beitrag, da das hier runterrutscht und verschwindet irgendwann.
Gruß
Ralf

Anzeige
@Alle
28.01.2015 18:45:54
Ralf
Hallo,
ich habe gerade im Test festgestellt, wenn ich 2 Dateien mit dem gleichen Verweis aufmache, wird das workbook_open der Verweisdatei nur ausgeführt, wenn die 1. Datei geöffnet wird.
Wenn die 2. Datei geöffnet wird, läd die Verweisdatei nicht nochmal, wodurch auch das Workbook_Open ausgelöst wird.
Wie kann man das machen, dass das bei jeder zu öffnenden Datei ausgeführt wird?
Voraussetzung: in der normalen Mappe ist kein Makro.
Gruß
Ralf

AW: AddIn Workbook_Open - Fehler
28.01.2015 20:03:03
Dirk
Hallo Ralf,
also ich werfe jetzt das Handtuch !!!
Zwar habe ich das mit dem Verweis endlich hinbekommen, kann ihn aber nicht speichern, d.h. beim erneuten Öffnen der code-losen Datei muß ich erst wieder den Verweis einrichten.
Und selbst dann kann ich zwar den Code der Verweis-Datei im VBA-Editor sehen (klar, sie wurde ja auch geöffnet), aber das war es auch schon.
Das Workbook_BeforeClose-Ereignis greift nur beim Schließen der Datei, in der diese Sub steht.
Und wenn schon solche Profis wie René und Luc die einzige Lösung in der Klassenprogrammierung sehen, dann werde ich nicht versuchen, das Rad neu zu erfinden.
Wünsche noch einen schönen Abend und bis demnächst.
Gruß Dirk

Anzeige
AW: AddIn Workbook_Open - Fehler
29.01.2015 10:43:05
Dirk
Hallo,
dank eurer Hilfe (besonders von Luc) habe habe ich das AddIn mit der Open-Routine zum Laufen bekommen.
An dem Versuch, auch die Close-Routine einzubauen scheiterte ich kläglich !
Aber ich freute mich trotzdem über das Erreichte u. das Dazugelernte - bis jetzt...
Ohne irgendwelche Änderungen an dem Projekt, den Verweisen oder irgendwelcher xl-Einstellungen erscheint nun wieder die benannte Fehlermeldung (s. Eingangsfrage). Also Verweis auf das AddIn gelöscht, selbst die xlam direkt gelöscht, xlsm wieder als xlam gespeichert, Verweis gesetzt, 3-5 erfolgreiche Tests u. wieder der Fehler.......
Was mache ich denn falsch oder welchen plausiblen Grund gibt es für dieses Verhalten von xl ?
mfg Dirk
https://www.herber.de/bbs/user/95390.xlsm

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige