Excel-Makro aus Word aufrufen

chris123030

Cadet 2nd Year
Registriert
Nov. 2015
Beiträge
26
Hallo zusammen,

ich würde gerne aus einer Word-Anwendung heraus ein Excel-Dokument öffnen und ein darin befindliches Makro ablaufen lassen.

Mein Code bisher:


Option Explicit

Private Sub CommandButton1_Click()

Dim XL As Object

Set XL = CreateObject("Excel.Application")
With XL

.Visible = True:

XL.Workbooks.Open "D:\Eigene Dateien\Mappe1.xlt"

.Run ("Kopieren")
End With

End Sub

Dabei erhalte ich aber die Fehlermeldung: Laufzeitfehler 1004 Das Makro "Kopieren" kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert.

Wenn ich das Makro aber in der betreffenden Excel-Mappe selbst öffne, läuft alles ohne Probleme. Also nur der Aufruf über Word funktioniert nicht.

Was kann der Fehler sein?

Vielen Dank:-)
 
Auf eine als "Private" deklarierte Sub kann man meines Wissens nur über andere Prozeduren aus dem selben Modul zugreifen. Probier mal, das "Private" durch "Public" zu ersetzen oder einfach wegzulassen (sollte aufs gleiche rauskommen).
 
Code:
XL.Workbooks("Mappe1.xlt").Kopieren
bzw.
Code:
XL.Workbooks("Mappe1.xlt").Worksheets("Tabelle1").Kopieren
falls der Code in Tabelle1 liegt.
 
Zuletzt bearbeitet: (Es muss natürlich Worksheets("Tabelle1") statt Tabelle1 sein.)
Also wenn ich das so ablaufen lasse:

Option Explicit

Sub CommandButton1_Click()

Dim XL As Object

Set XL = CreateObject("Excel.Application")
With XL

.Visible = True:

XL.Workbooks.Open "D:\Eigene Dateien\Mappe1.xlt"

XL.Workbooks("Mappe1.xlt").Kopieren
End With

End Sub


dann erhalte ich Laufzeitfehler 9 "Index außerhalb des gültigen Bereichs".
 
Ich hätte spontan getippt, dass es an dem doppelten XL liegen könnte (einmal in with und dann noch einmal so) - daran scheint es aber nicht zu liegen, ich kriege hier keinen Fehler, wenn ich das in der Art laufen lasse.

Kann es sein, dass der Fehler innerhalb des ExcelSub liegt? An für sich steht in dem Code ja nirgends ein Index/Array.
 
Es lag wohl daran, dass wenn

XL.Workbooks.Open "D:\Eigene Dateien\Mappe1.xlt"

abgelaufen ist, natürlich nicht mehr Mappe1.xlt (Vorlage) geöffnet ist, sondern Mappe11.xls als daraus erzeugte Mappe.
Daher konnte

XL.Workbooks("Mappe1.xlt").Kopieren

nur ins Leere laufen.
Wenn ich jetzt statt Mappe1.xlt eine Datei Mappe1.xls öffnen lasse, funktioniert das Ganze.

Also mit einer normalen Mappe (.xls) läuft es wie gesagt schon mal, wie würde der Code denn aussehen, wenn ich tatsächlich auf eine Vorlage zugreifen würde und auf das Makro in der daraus erzeugten Mappe zugreifen möchte?
 
Das ergibt Sinn.
Nur leider ändert sich ja der Name der neu erzeugten Mappe ständig. Man könnte aber evtl. auf den Namen der nach dem Öffnen aktuellen Mappe zugreifen (ActiveWorkbook.name) und den speichern. Muss ich mir nochmal etwas genauer anschauen.

Edit: Jup, es funktioniert, einfach eine Stringvariable (etwa 'new_workbook_name') anzulegen, und dieser dann nach dem Öffnen einfach XL.activeworkbook.name zuweisen.
Dann kann über all da wo bisher ("Mappe1.xlt") steht einfach (new_workbook_name) verwendet werden.
Oder, da aus der Vorlage anscheinend immer der gleiche Name erzeugt wird, d.h. es wird gar nicht hochgezählt, kannst du alternativ auch einfach ("Mappe11") verwenden.
 
Zuletzt bearbeitet:
Ähhm, ich hätte nicht gedacht, das hier Fragen zum applikationsübergreifenden Skripten beantwortet werden. Alle Achtung:cool_alt:
Fand das deshalb sehr interessant und eine interessante Anregung.

Deshalb meine Zusatzfrage: Wenn ich in Outlook Word als Editor eingestellt habe, gibt es dann eine Möglichkeit, mit ähnlichen Mechanismen die Texte in Outlook (E-Mails, Notizfelder) mit Word-Makros anzufassen? Welche Objekte muss ich einrichten, um auf den aktuellen Notiztext oder E-Mail-Text zuzugreifen?

Viele Grüße, Halwe
 
Schön, dass es bei dir klappt, chris.

Ich kenne mich in VBA eigentlich nur in Excel ein bisschen aus.

Ich nehme an, dass es mit ähnlichen Mechanismen möglich ist, ein Word-Objekt aus Outlook heraus zu starten und den Nachrichtentext daran zu übergeben.
Die Frage ist allerdings, ob das überhaupt nötig wäre, oder ob der bestehende Word-Makro nicht gleich in Outlook angewendet werden könnte (je nach dem, ob er eben Funktionen nutzt, die nur in Word zur Verfügung stehen und in Outlook nicht.)
 
Danke für die Rückmeldung.

Jaja, es geht darum, spezielle Word-Makrobefehle auf die Texte in Outlook anzuwenden. Die gibt's in Outlook nicht.
Aber das ist dann wohl doch etwas schwerer...

Viele Grüße, Halwe
 
Da geht bestimmt was. Nur kenn mich grade halt nicht damit aus.
Google spuckt z.B. das hier aus: http://www.slipstick.com/developer/word-macro-apply-formatting-outlook-email/

Vielleicht hilft das schon ein wenig. Kannst ja mal einen eigenen Thread erstellen, der lockt vielleicht mehr potentielle Helfer an.
Ich werde mir das bei Gelegenheit auch mal ein bisschen genauer anschauen. Auf den ersten Blick denke ich mal, dass diese Anwendung von Wordmakros auf Outlookmails möglich sein sollte.
 
Hallo simpsonsfan,
danke dir für den Link. Das ist wirklich ein guter Einstieg in das Thema und macht Mut. Damit sollte es mit überschaubarer Komplexität möglich sein, ein paar von meinen hübschen Word Makros nach Outlook rüberzuziehen.
Viele Grüße, Halle
 
Zurück
Oben