Vba Parameter von word nach excel

Hi,
ich möchte aus Word ein Makro in EXCEL starten, und eine Variable „Datum“ mitgeben.

Mein VBA-Code:
Set appXLS = CreateObject(„Excel.Application“)
appXLS.Visible = True
appXLS.Workbooks.Open „D:\Users\EXCEL.xlsm“

appXLS.Run „Modul1.Termin(datDatum)“

Das Makro befindet sich im EXCEL im Modul1 mit dem Namen Termin
Asführung:
. Excel wird gestartet
. Dokument wird eingelesen
. Laufzeitfehler 1004 bei „RUN“

Das Makro ist in der Mappe und aktiviert. Die Sicherheitseinstellungen erlauben auch die Ausführung.
Da ich auf ähnliche Art von ACCESS nach EXCEL wechsel, bin ich ratlos. Hat Word da Besonderheiten?

DAnke für jeden Hinweis und liebe Grüße aus dem (mal wieder) verschneiten NRW

Hi,
ich möchte aus Word ein Makro in EXCEL starten, und eine
Variable „Datum“ mitgeben.

Set appXLS = CreateObject(„Excel.Application“)
appXLS.Visible = True
appXLS.Workbooks.Open „D:\Users\EXCEL.xlsm“
appXLS.Run „Modul1.Termin(datDatum)“

Das Makro befindet sich im EXCEL im Modul1 mit dem Namen
Termin
. Laufzeitfehler 1004 bei „RUN“

Hallo Gerhard,

bitte grundsätzlich kleine eigenständiglaufende 8globale Variablen in der Prozedur deklarieren) Prozeduren posten, beim Posten den Pre-Tag nicht vergessen.

Immer Versionsnummer angeben, grad bei 2007

appXLS.Run „Modul1.Termin“ datDatum

(getestet mit Excel2000, wenns nicht klappt, teste ich nachher in Word2007)

Gruß
Reinhard

Hallo Reinhard,
danke für Deine zügige Antwort.

Ich habe ´XP mit 2003, SP 3 und schon 2010-Beta 1.

In 2003:
Schon einen Compilerfehler (rote Zeile) bei der Version ohne Klammern. Habe dann ein Komma vor datDatum gesetzt. Fehler bei der Ausführung:
Laufzeitfehler 450, falsche Anzahl von Argumenten.

In 2010:
siehe 2003, exakt das gleiche Verhalten.

Nach meinen Erfahrungen ist (fast) kein Unterschied zwischen VBA 2003 und 2007. Bei 2010 bin ich bisher noch nicht ganz sicher. Fest steht nur, dass alle meine Funktionen laufen. (Die Parameter-Übergabe ist neu)

Liebe Grüße
Gerhard

Hi, noch ein „Nachschlag“.
Habe jetzt alle Varianten durchprobiert. So, wie in er Word-VBA-Hilfe (run) beschrieben, als auch in EXCEL.

Ratlos blickte er umher, wo kommt denn Hilfe her?

Hallo Gerhard,

sehe ich das richtig: der Fehler tritt bei

appXLS.Run „Modul1.Termin(datDatum)“

In der Hlfe steht die Syntax von Run:

Ausdruck.Run(MacroName, varg1, varg2, varg3, varg4, varg5, varg6, varg7, varg8, varg9, varg10, varg11, varg12, varg13, varg14, varg15, varg16, varg17, varg18, varg19, varg20, varg21, varg22, varg23, varg24, varg25, varg26, varg27, varg28, varg29, varg30)

mit

Application.Run MacroName:=„Normal.Module2.Macro1“

und

varg1…varg30 Optionaler Variant-Wert. Parameterwerte für Makros. Sie können für das angegebene Makro bis zu 30 Parameter festlegen.

Dabei fällt doch auf:

  • ein Prozedur(Makro)-Name in VBA hat am Ende ein (meist leeres) Klammerpaar
  • in der Run-Syntax hat er das nicht
  • dafür akzeptiert die Run-Syntax dreißig Parameter, mit denen man der aufgerufenen Prozedur Parameter übergeben kann

Dennoch stellt sich an dem Punkt eine weitere Frage.
"appXLS.Run „Modul1.Termin(datDatum)“ macht den Fehler. Es könnte aber sowohl das Objekt appXLS fehlen als auch das Objekt, das appXLS.Run aufrufen soll. Leider kann ich die nicht beantworten.

Gruß

M.

Danke, danke, für die liebe Mühe.
Also: es klappt ja ohne Parameter im Aufruf:
etwa die Variante: appXLS.Run „Modul1.Termin“

Habe die Hilfe auch sehr intensiv gelesen und rumprobiert. Alle vorstellbaren Versionen. (Vor der Anfrage hier)
Deine Vermutung, Markus, appXLS ist nicht richtig versorgt, wird so vom System zwar kommentiert, aber da steht schon der richtige Wert drin. Siehe gesamte Instruktionen aus dem ersten Hinweis.

Die Hilfe zeigt ja auch Verbindung Word - Word auf. Das habe ich noch nicht probiert. Das mit dem Klammerpaar ist richtig. «run» hat keins!

Die Notlösung - ich schreibe die Werte in eine Datei und lese sie in EXCEL ein. Ha, ha, etwas besseres fällt mir nicht ein.

Liebe Grüße
G

Die Notlösung - ich schreibe die Werte in eine Datei und lese
sie in EXCEL ein. Ha, ha, etwas besseres fällt mir nicht ein.

Hallo Gerhard,

egal, besser eine Notlösung als gar nix :smile:

Zeige mal beide Codes, definiere darin alles auch datDatum, also keine globalen uns unbekannt gefüllten Variablen.
Ich probiere das dann mal von jmdn. mit 2010 testen zu lassen.

Gruß
Reinhard

Lieber Reinhard,
wenn ich etwas schätze, dann ist das „dranbleiben“! Danke für Dein Kümmern. Gerne bleibe auch ich dran. Sicher ist das Thema von Allgemeininteresse.
Also: Problembeschreibung: Ich bekomme von irgendjemand ein Word-Dokument per Mail - Bestellung.
Darin sind Textmarken.
Ich habe in der Normal.dotm einen VBA-Code, der das auswertet. Unteranderem wird da die Variable datDatum gefüllt. Der Termin soll in einer EXCEL-Liste aufgeschlagen werden und die Daten werden hier dann eingebucht. Daraus wird ein Outlook-Macro gestartet, welches den Termin dann im Kalender einträgt.
Wie sieht das im VBA-Code aus:

Word-Macro

Dim appXLS As Object
Dim intFehler As Integer
Dim TNName As String
Dim strTermin As String
Dim strPfadWork As String
Dim strPfadDesktop As String
Dim strPfadSteuer As String
Dim datDatum as Date

 strPfadWork = GetSpecialFolder(CSIDL\_PERSONAL) & "\Work\"
 strPfadDesktop = GetSpecialFolder(CSIDL\_DESKTOP) & "\"
 strPfadSteuer = GetSpecialFolder(CSIDL\_PERSONAL) & "\Dokumente\UD-S\Steuer\"

 TNName = "Termin"
 If ActiveDocument.Bookmarks.Exists(TNName) = True Then
 Selection.GoTo What:=wdGoToBookmark, Name:=(TNName)
 Selection.EndKey Unit:=wdLine, Extend:=wdExtend
 Selection.Copy
 intFehler = InStr(1, Selection.Text, "2010", vbTextCompare)
 If intFehler \> 1 And intFehler 
Soweit das Word-Macro
in EXCEL ist das Macro im Module, und hier in Modul1 gespeichert 



    
    Option Explicit
    
    Public Function Termin()
    Dim intZaehler As Integer 'die Variablen sollen aus Word übergeben werden
    Dim datDatum As Date
    Dim strTermin As String
    Dim strPfadWork As String
    
     strPfadWork = GetSpecialFolder(CSIDL\_PERSONAL) & "\Work\"
     Open strPfadWork & "ZwiTest.txt" For Input Shared As #1
     Input #1, strTermin
     Close #1
     datDatum = strTermin
     Sheets("Tabelle4").Select 'Stelle dich auf ArbBlatt 
    ' Stelle dich im ArbBlatt auf die datDatum-Zeile
     Call SucheDatum(datDatum, intZaehler)
     If intZaehler \> 369 Then 'Das mit intZaehler geht auch eleganter, in einer 2003-Version SP1? klappte es auch nicht
     MsgBox "Datum " & datDatum & " nicht gefunden", vbInformation, \_
     "aus Word-Normal.dotm"
     End If
    End Function



Da die Funktion "SucheDatum" innerhalb der EXCEL-Arbeitsmappe öfter gebraucht wird, wurde das Macro "Termin" für diesen Fall dazwischen gelegt. Grund: Aufbereitung der Variablen

So, da bin ich mal gespannt, wie es weitergeht. Würde mich echt freuen, von Dir, Reinhard zu hören.
Liebe Grüße
Gerhard