Mai 19, 2022, 17:25:50

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


[gelöst] Aus Access ein VBA-Skript in Excel starten

Begonnen von bhommi, April 24, 2022, 09:16:56

⏪ vorheriges - nächstes ⏩

bhommi

April 24, 2022, 09:16:56 Letzte Bearbeitung: April 26, 2022, 19:47:55 von bhommi
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
Sofern nicht anders angegeben gilt die Frage für Access 2016.
-----------------------------------------------------------------------------
Und hier noch der größte Tipp aller Zeiten:
"Wer an Jesus glaubt, der hat ewiges Leben."
Die Bibel, Johannes-Evangelium Kapitel 6 Vers 47
-----------------------------------------------------------------------------

PhilS

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
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

bhommi

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
Sofern nicht anders angegeben gilt die Frage für Access 2016.
-----------------------------------------------------------------------------
Und hier noch der größte Tipp aller Zeiten:
"Wer an Jesus glaubt, der hat ewiges Leben."
Die Bibel, Johannes-Evangelium Kapitel 6 Vers 47
-----------------------------------------------------------------------------

Beaker s.a.

Zitataber für den ersten Moment könnte es reichen.
Deiner Signatur nach hast du ja Zeit genug eine bessere Lösung zu finden.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

bhommi

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!
Sofern nicht anders angegeben gilt die Frage für Access 2016.
-----------------------------------------------------------------------------
Und hier noch der größte Tipp aller Zeiten:
"Wer an Jesus glaubt, der hat ewiges Leben."
Die Bibel, Johannes-Evangelium Kapitel 6 Vers 47
-----------------------------------------------------------------------------