Hallo zusammen,
ich habe eine Excel-Datei in der ein geschütztes VBA-Skript enthalten ist.
Selbst wenn ich es mit (illegalen) Methoden entsperre, kann ich es auf Grund des Umfangs nicht einfach in Access nachbauen. Daher würde ich gerne das Skript aus Access heraus starten.
Hintergrund ist, dass ich bisher zig Kopien dieser Exceldatei erstellen muss, da immer unterschiedliche Daten enthalten sind. Das würde ich gerne optimieren.
Die Datenhaltung aus Access nach Excel zu bekommen ist kein Problem. Das habe ich schon erfolgreich verprobt. Es muss halt dann im Anschluss das Skript laufen.
Excel zu öffnen ist ja ohne Probleme zu machen, aber was dann?
Sub test()
Dim app As Excel.Application
Dim wbk As Excel.Workbook
Set app = New Excel.Application
Set wbk = app.Workbooks.Open("pfad....xlsm")
wbk. ..... und jetzt?
wbk.Close
Set app = Nothing
End Sub
Hat jemand eine Idee, was ich da machen muss?
Geht das überhaupt?
Danke euch!
Gruß
Björn
Zitat von: bhommi am April 24, 2022, 09:16:56ich habe eine Excel-Datei in der ein geschütztes VBA-Skript enthalten ist.
Selbst wenn ich es mit (illegalen) Methoden entsperre, kann ich es auf Grund des Umfangs nicht einfach in Access nachbauen. Daher würde ich gerne das Skript aus Access heraus starten.
Hintergrund ist, dass ich bisher zig Kopien dieser Exceldatei erstellen muss, da immer unterschiedliche Daten enthalten sind. Das würde ich gerne optimieren.
Der Umfang des Excel-VBA-Codes ist kein guter Grund. Im wesentlichen kannst du den Code kopieren und passt dann nur die Referenzen auf Application, Workbook, Worksheet etc. an.
Das wäre aus meiner Sicht der bessere Ansatz, insbesondere wenn die Excel-Datei mit verschiedenen Daten immer wieder neu generiert wird. Dann hast du die Logik an einer zentralen Stelle und nicht dupliziert über X verschiedene Dateien.
Dein Ansatz, wenn auch IMO suboptimal, geht aber auch:
Sub test()
Dim app As Excel.Application
Dim wbk As Excel.Workbook
Set app = New Excel.Application
Set wbk = app.Workbooks.Open("pfad....xlsm")
app.Run "NameDeinerMakroSub"
wbk.Close
Set app = Nothing
End Sub
Zitat von: PhilS am April 24, 2022, 11:38:31Der Umfang des Excel-VBA-Codes ist kein guter Grund. Im wesentlichen kannst du den Code kopieren und passt dann nur die Referenzen auf Application, Workbook, Worksheet etc. an.
Das wäre aus meiner Sicht der bessere Ansatz, insbesondere wenn die Excel-Datei mit verschiedenen Daten immer wieder neu generiert wird. Dann hast du die Logik an einer zentralen Stelle und nicht dupliziert über X verschiedene Dateien.
Ich stimme dir grundsätzlich zu. Die Excel-Datei besteht jedoch aus zig Modulen und Klassenmodulen, daher fällt es mir schwer, diese eben mal nach Access zu übertragen.
Problem ist, dass es kein Startmakro gibt, sondern ein ActiveX-CommandButton das Skript aufruft.
Daher funzt deine Ergänzung leider so direkt nicht. Es kommt dann der Fehlerhinweis "1004 Das Makro 'xxx' kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert.".
Dies kann ich jedoch mit der Version ohne Code-Schutz umgehen, wenn auch nicht ganz sauber ;-) Aber immerhin würde das funktionieren, habe es getestet.
Ich weiß, schön ist anders, aber für den ersten Moment könnte es reichen.
Danke daher soweit für deine Idee und Rückmeldung.
Falls noch jemand ne Idee hat, dann gerne, ansonsten werde ich es Morgen auf "gelöst" setzen.
Gruß
Björn
Zitataber für den ersten Moment könnte es reichen.
Deiner Signatur nach hast du ja Zeit genug eine bessere Lösung zu finden.
Zitatein geschütztes VBA-Skript
...
besteht jedoch aus zig Modulen und Klassenmodulen
Gelobt sei die sprachliche Präzision.
ZitatHintergrund ist, dass ich bisher zig Kopien dieser Exceldatei erstellen muss, da immer unterschiedliche Daten enthalten sind
Warum soll bei einer DateiERSTELLUNG ein Codestart nötig sein?
Man könnte eine Vorlage ohne Daten verwenden. Diese kann man einfach vervielfältigen, und dann die Kopien mit Daten zielgerichtet versorgen.
Oder Du wendest Dich an den Entwickler. Bei der angedeuteten Vielfalt wäre es denkbar, dass da eine Eigenvervielfältigung umsetzbar ist.
Danke für die Rückmeldungen.
Mit dem Entwickler zu sprechen ist wie mir einer Wand.
Ist auch egal, mir ist erstmal geholfen.
Daher danke!