Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Für VBA-Experten Application.Run

Forumthread: Für VBA-Experten Application.Run

Für VBA-Experten Application.Run
13.12.2022 17:29:17
Daniel
Hallo
vor kurzem gabs hier eine Frage zu Application.Run mit Parameterübergabe.
dabei kam heraus, dass bei

Application.Run Makroname, Var1, Var2
die Übergabe immer byVal erfolgt und niemals byRef.
von Peterk kam allerdings die Information ( https://bettersolutions.com/vba/macros/application-run.htm ), dass eine Übergabe byRef (also mit Rückgabe der veränderten Parameter in das aufrufende Makro) funktioniert, wenn man das Application als Objektvariable definiert, dh

dim APP as Object
Set APP = Application
APP.Run Makroname, Var1, Var2

zum selber testen hier mal ein vollständiger Testcode

Sub test1()
Dim x, y, Ergebnis
Dim App As Object
x = 3
y = 4
Ergebnis = "leer"
Application.Run "Potenz", x, y, Ergebnis
Debug.Print "Application normal: "; Ergebnis
Set App = Application
App.Run "Potenz", x, y, Ergebnis
Debug.Print "Application Variable: "; Ergebnis
End Sub

Sub Potenz(Basis, Hochzahl, Rückgabewert)
Rückgabewert = Basis ^ Hochzahl
End Sub
kennt jemand den technischen Hintergrund warum das so ist?
Gruß Daniel
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Für VBA-Experten Application.Run
14.12.2022 19:23:14
Luschi
Hallo Daniel,
wenn ich einen Rückgabewert brauche, dann mache ich das so:

Sub test2()
Dim x, y, Ergebnis
x = 3
y = 4
Ergebnis = "leer"
Ergebnis = Application.Run("Potenz_1", x, y)
Debug.Print "Application normal: "; Ergebnis
End Sub
Function Potenz_1(Basis, Hochzahl) As Variant
Potenz_1 = Basis ^ Hochzahl
End Function
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Für VBA-Experten Application.Run
14.12.2022 19:43:28
Daniel
ja, schon klar.
Aber darum gings nicht.
Die Frage war, warum Application.Run normalerweise die Variablen nur byVal übergibt, während eine Übergabe byRef möglich wird, wenn man Application einer Variablen zuweist und diese verwendet.
Gruß Daniel
;
Anzeige

Infobox / Tutorial

Anwendung von Application.Run in Excel VBA


Schritt-für-Schritt-Anleitung

Um Application.Run in Excel VBA effektiv zu nutzen, folge diesen Schritten:

  1. Makro Erstellen: Erstelle zuerst ein Makro, das Du mit Application.Run aufrufen möchtest. Beispiel:

    Sub Potenz(Basis, Hochzahl, Rückgabewert)
        Rückgabewert = Basis ^ Hochzahl
    End Sub
  2. Anwendung von Application.Run: Verwende Application.Run, um das Makro von einem anderen Makro aus aufzurufen. Beispiel mit Parameterübergabe:

    Sub test1()
        Dim x, y, Ergebnis
        x = 3
        y = 4
        Ergebnis = "leer"
        Application.Run "Potenz", x, y, Ergebnis
        Debug.Print "Application normal: "; Ergebnis
    End Sub
  3. ByRef vs. ByVal: Um die Übergabe von Variablen per Referenz (byRef) zu ermöglichen, kannst Du Application als Objektvariable definieren:

    Dim App As Object
    Set App = Application
    App.Run "Potenz", x, y, Ergebnis
    Debug.Print "Application Variable: "; Ergebnis

Häufige Fehler und Lösungen

  • Fehler: "Sub oder Funktion nicht gefunden"
    Lösung: Stelle sicher, dass der Name des Makros korrekt geschrieben ist und dass es sich im gleichen Modul oder in einem öffentlichen Modul befindet.

  • Fehler: Ungültige Parameteranzahl
    Lösung: Überprüfe die Anzahl der übergebenen Parameter. Application.Run erwartet die gleiche Anzahl an Parametern wie das aufgerufene Makro.


Alternative Methoden

Wenn Du Application.Run nicht verwenden möchtest, gibt es alternative Methoden, um Makros in Excel VBA auszuführen:

  • Direkter Aufruf: Du kannst ein Makro auch direkt aufrufen, anstatt Application.Run zu verwenden:

    Call Potenz(x, y, Ergebnis)
  • VBA Call-Anweisung: Eine weitere Möglichkeit ist die Verwendung der Call-Anweisung, die insbesondere bei Funktionen nützlich ist:

    Ergebnis = Call Potenz_1(x, y)

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du Application.Run in Deinen Excel VBA Projekten verwenden kannst:

  1. Makro mit Rückgabewerten:

    Sub test2()
        Dim x, y, Ergebnis
        x = 3
        y = 4
        Ergebnis = Application.Run("Potenz_1", x, y)
        Debug.Print "Rückgabewert: "; Ergebnis
    End Sub
    
    Function Potenz_1(Basis, Hochzahl) As Variant
        Potenz_1 = Basis ^ Hochzahl
    End Function
  2. Verwendung von Parameterübergabe:

    Sub test3()
        Dim x, y, Ergebnis
        x = 5
        y = 3
        Ergebnis = "leer"
    
        ' Anwendung von Application.Run mit byRef
        Dim App As Object
        Set App = Application
        App.Run "Potenz", x, y, Ergebnis
        Debug.Print "Ergebnis durch byRef: "; Ergebnis
    End Sub

Tipps für Profis

  • Optimierung: Verwende Application.Run in Schleifen, um mehrere Makros effizient auszuführen.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler bei der Ausführung zu handhaben, besonders bei dynamischen Aufrufen.
  • Dokumentation: Halte Deine Makros gut dokumentiert, sodass andere Entwickler (oder Du selbst) schnell verstehen, was Application.Run in deinem Code macht.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen byVal und byRef bei der Verwendung von Application.Run?
byVal übergibt eine Kopie des Wertes, während byRef eine Referenz auf die ursprüngliche Variable übergibt. Dies bedeutet, dass Änderungen an der Variable im aufgerufenen Makro auch die ursprüngliche Variable beeinflussen.

2. Wie kann ich mehrere Parameter mit Application.Run übergeben?
Du kannst mehrere Parameter wie folgt übergeben: Application.Run "Makroname", Param1, Param2, Param3 und so weiter.

3. Funktioniert Application.Run in allen Excel-Versionen?
Ja, Application.Run ist eine grundlegende Funktion in Excel VBA und sollte in allen modernen Excel-Versionen funktionieren. Achte jedoch darauf, dass bestimmte Funktionen nur in neueren Versionen verfügbar sein könnten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige