Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro in "anderem" Workbook aufrufen mit Paramete

Makro in "anderem" Workbook aufrufen mit Paramete
14.04.2013 10:10:53
ing.grohn
Hallo Forum,
mein Schlauch ist platt vom drauf stehen!
wenn ich ein Makro in einem "anderen" Workbook aufrufe, gebe ich ein:
Application.Run "RechKanzlei.xls!Summen"

(als Beispiel). Wie muss ich das machen, wenn Parameter übergeben werden?
Application.Run "Kanzlei.xls!HistorieSchreiben(ProzReg, strName,Rechnr,Dateiname)"

macht nur Syntaxfehler!?
Kann mir jemand helfen?
Recht herzlichen Dank für den Beistand
Mit freundlichen Grüßen
Albrecht

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro in "anderem" Workbook aufrufen mit Paramete
14.04.2013 10:21:21
Hajo_Zi
Hallo Albrecht,
Application.Run "PERSONAL.XlSB!MarkBerIdenfiz", 1, 2, 3, 4

AW: Makro in "anderem" Workbook aufrufen mit Paramete
14.04.2013 10:34:36
ing.grohn
Hallo Hajo,
vielen Dank und einen schönen Sonntag
Mit freundlichen Grüßen
Albrecht

Anzeige
Nachtrag: muss als FunKtion behandelt werden!?
14.04.2013 11:35:35
ing.grohn

s = Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)

obwohl "HistorieSchreiben" ne Prozedur ist!?
mfG
Albrecht

Application.Run als Funktion?
14.04.2013 12:33:08
Erich
Hi Albrecht,
was meinst du mit deiner Frage?
In
s = Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)
verwendest du Application.Run als Funktion, den Rückgabewert speicherst du in s.
Was meinst du, welchen Wert für s der Aufruf "Application.Run(...)" zurückliefert/liefern soll?
Das Makro "HistorieSchreiben" liefert nur dann einen Wert zurück, wenn es eine Function (oder Property) ist.
Ist "HistorieSchreiben" eine Sub - was sollte dann nachher in der Variablen s stehen?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Application.Run als Funktion?
14.04.2013 12:46:29
ing.grohn
Hallo Erich,
in dem Workbook "Kanzlei.xls" gibts die Procedur "HistorieSchreiben" mit den 4 Parametern.
In dem Workbook rufe ich die Prozedur ganz "normal" mit "Call HistorieSchreiben (p1, p2, p3, p4)" auf und das funktioniert ohne Probleme (übrigens ohne Call ist die Zeile auch rot unterlegt, Syntaxfehler).
Schreibe ich nun: "Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)"
wird die Zeile ebenfalls rot hervorgehoben!
Mit "s=Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)" funktionierts!
hier noch mal der Kopf der Prozedur:
Sub HistorieSchreiben(ProzReg As String, strName As String, Grund As String, DatName As String)

Mit freundlichen Grüßen
Albrecht

Anzeige
es sind die Klammern
14.04.2013 13:28:40
Erich
Hi Albrecht,
das sind richtige Schreibweisen:
Call HistorieSchreiben(p1, p2, p3, p4)
HistorieSchreiben p1, p2, p3, p4
Application.Run "Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname
s = Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)
und das sind falsche Schreibweisen:
Call HistorieSchreiben p1, p2, p3, p4
HistorieSchreiben(p1, p2, p3, p4)
Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, RechNr, Dateiname)
Es kommt sehr auf die Klammern an. Dazu steht auch etwas in der VBA-Hilfe zur Call-Anweisung.
Hajos Vorschlag war natürlich auch schon richtig - da kommen keine Klammern vor.
Mein Vorschlag: Wenn du Application.Run nicht wirklich brauchst, lass es weg und verwende
Call HistorieSchreiben (p1, p2, p3, p4)
oder
HistorieSchreiben p1, p2, p3, p4
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: es sind die Klammern
14.04.2013 14:41:11
ing.grohn
Hallo Erich,
junge, junge, hab mir bisher keine Gedanken über die Klammern gemacht. Vielmehr glaubte ich: mehr als 1 Parameter macht Call erforderlich. Klammern war für mich "normal", weil ja auch die Prozeduren und Funktionen Klammern haben.
sehr sehr hilfreich!!
Du bist also der Meinung: besser eine Prozedur doppelt schreiben/haben als Run aufrufen?
Mit freundlichen Grüßen
Albrecht

Anzeige
AW: es sind die Klammern
14.04.2013 16:52:19
Erich
Hi Albrecht,
"Du bist also der Meinung: besser eine Prozedur doppelt schreiben/haben als Run aufrufen?"
Nein - der Meinung bin ich nun wirklich nicht! Ich hattre doch geschrieben:
"Wenn du Application.Run nicht wirklich brauchst, lass es weg und verwende Call ..."
Dabei war ich (fälschlich) davon ausgegangen, dass du 'nur' ein Problem mit der Syntax von "Call" hast.
Nun habe ich oben im Thread noch mal nachgesehen. Du willst eine Prozedur in einem anderen Workbook aufrufen,
und dazu brauchst du Application.Run.
Noch einen schönen Sonntagabend! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: es sind die Klammern
14.04.2013 16:58:28
ing.grohn
Hallo Erich,
mit Call hatte ich keine Probleme!
(benutze ich generell!)
mir ging es nur um den Aufruf eine Prozedur in einem zweiten Workbook!
(hatte ich bsiher nur ohne Parameterübergabe gebraucht)
Vielen Dank für die Klarheit
Mit freundlichen Grüßen
Albrecht
(und eine schöne Woche)

Anzeige
Meist reicht Call, manchmal muss es aber Run sein!
16.04.2013 20:38:28
Luc:-?
Gruß Luc :-?
;
Anzeige
Anzeige

Infobox / Tutorial

Makro in einem anderen Workbook aufrufen mit Parametern


Schritt-für-Schritt-Anleitung

Um ein Makro in einem anderen Workbook mit Parametern aufzurufen, kannst du die folgende Syntax verwenden:

  1. Stelle sicher, dass das Workbook, welches das Makro enthält, geöffnet ist.

  2. Verwende den Befehl Application.Run, um das Makro aufzurufen. Der allgemeine Aufbau sieht so aus:

    Application.Run "WorkbookName.xls!MacroName", Parameter1, Parameter2, Parameter3
  3. Beispiel für einen Aufruf mit Parametern:

    Application.Run "Kanzlei.xls!HistorieSchreiben", ProzReg, strName, Rechnr, Dateiname

Achte darauf, dass die Parameter korrekt übergeben werden und dass die Klammern bei der Verwendung von Application.Run beachtet werden.


Häufige Fehler und Lösungen

  1. Syntaxfehler:

    • Wenn du einen Syntaxfehler erhältst, überprüfe die Verwendung von Klammern. Bei der Verwendung von Application.Run sind Klammern erforderlich, wenn du die Rückgabe einer Funktion speichern möchtest, z.B.:
    s = Application.Run("Kanzlei.xls!HistorieSchreiben", ProzReg, strName, Rechnr, Dateiname)
  2. Makro nicht gefunden:

    • Stelle sicher, dass der Name des Workbooks und das Makro korrekt geschrieben sind. Achte auch auf die Dateiendung und darauf, dass das Workbook geöffnet ist.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, ein Makro aufzurufen:

  1. Call-Anweisung: Du kannst die Call-Anweisung verwenden, um ein Makro aufzurufen, wenn du nur ein Workbook verwendest:

    Call HistorieSchreiben(ProzReg, strName, Rechnr, Dateiname)
  2. Direkter Aufruf ohne Application.Run: Wenn das Makro in dem aktuellen Workbook ist, kannst du es einfach so aufrufen:

    HistorieSchreiben ProzReg, strName, Rechnr, Dateiname

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von Application.Run:

  1. Makro ohne Rückgabewert:

    Application.Run "Kanzlei.xls!HistorieSchreiben", "Wert1", "Wert2", "Wert3", "Wert4"
  2. Makro mit Rückgabewert:

    Dim result As Variant
    result = Application.Run("Kanzlei.xls!HistorieSchreiben", "Wert1", "Wert2", "Wert3", "Wert4")

Tipps für Profis

  • Verwende Call nur, wenn nötig: In vielen Fällen ist es einfacher, die Prozedur direkt aufzurufen, anstatt Application.Run zu verwenden. Dies macht den Code klarer und einfacher zu lesen.
  • Parameter überprüfen: Stelle sicher, dass die übergebenen Parameter die korrekten Datentypen haben, um Laufzeitfehler zu vermeiden.
  • Klammern beachten: Achte darauf, dass die Klammern richtig gesetzt sind, da sie die Funktionsweise des Aufrufs beeinflussen können.

FAQ: Häufige Fragen

1. Kann ich ein Makro aus einem geschlossenen Workbook aufrufen?
Nein, das Workbook muss geöffnet sein, um das Makro mit Application.Run aufzurufen.

2. Was passiert, wenn ich die falschen Parameter übergebe?
Wenn die Parameter nicht mit den erwarteten Datentypen übereinstimmen, kann es zu Laufzeitfehlern kommen. Überprüfe daher immer die Datentypen vor dem Aufruf.

3. Gibt es einen Unterschied zwischen Call und Application.Run?
Ja, Call wird verwendet, um ein Makro im aktuellen Workbook oder in einem anderen Workbook ohne Rückgabewert aufzurufen, während Application.Run auch Rückgabewerte verarbeiten kann und häufig für Makros in anderen Workbooks verwendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige