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

Forumthread: Aufruf von Sub in Sub

Aufruf von Sub in Sub
19.04.2017 15:45:41
Sub
Hi,
irgendwie will mein Aufruf von einem Unterprogramm in einem Unterprogramm nicht klappen. Folgendes habe ich bisher probiert:
Sub Function1()
Call Function2(0815)
End Sub

Sub Function2(Value as Integer)
End Sub
Lasse ich die Argumente bei Function2 weg funktioniert der Aufruf mit Call Function2 und diese wird ausgeführt.
Habe es auch schon ohne Klammern versucht: Call Function2 0815 ...will alles nicht klappen.
Wo liegt mein Fehler? Danke vorab.
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufruf von Sub in Sub
19.04.2017 15:47:44
Sub
Wenn ich das Makro ausführen möchte kommt folgender Fehler:
Fehler beim Kompilieren:
Argumenttyp ByRef unverträglich
AW: Aufruf von Sub in Sub
19.04.2017 15:53:07
Sub
Hi Marc
Ohne zu testen... Value als Name für eine Variable ist schlecht, weil der Begriff Value Bestandteil vom VBA-Syntax ist.
N.b. eine Prozedur als Funktion zu bezeichnen ist zusätzlich verwirrend, weil Function ist nicht gleich Sub.
Und der Vollständigkeit halber erwähnt. Die Null in 0815 geht natürlich verloren, weil Typ Integer ist eine Zahl. Ansonsten müsstest du als String übergeben, aber das wäre auch ungewöhnlich.
cu
Chris
Anzeige
AW: Aufruf von Sub in Sub
19.04.2017 15:59:09
Sub
Hatte es quasi nur als Beispiel so angegeben. Weder heißen die Prozeduren Function noch das Argument Value...war nicht gerade glücklich von mir gewählt.
Fehler lag am Ende wo ganz anders. Das Argument war vom Typ Long und in der Sub hab ich es als Integer erwartet. Ändert man das auf Long geht auch alles wie erwartet.
Anzeige
AW: dann liegts an der byRef Einstellung
19.04.2017 16:03:38
Sheldon
Hallo Chris,
wenn Du Function2 so einleitest
Sub Function2(byVal Eingabe as Integer)
dann funktioniert es auch. Natürlich vorausgesetzt, dass der in der Long Integer enthaltene Wert klein genug ist, um ihn an eine Integer Variable zu übergeben!
Integer: -32.768 bis 32.767
Long Integer: -2.147.483.648 bis 2.147.483.647
Gruß
Sheldon
Anzeige
AW: Aufruf von Sub in Sub
19.04.2017 16:06:29
Sub
Hallo,
einen Sub Funktion zu nennen ist sinnbefreit...
Hier ein Beispiel für ByVal und ByRef...

Sub aufruf()
Dim i As Integer
Call function_mit_ByVal_Parameter(123)
Call function_mit_ByRef_Parameter(i)
MsgBox i
End Sub
Function function_mit_ByVal_Parameter(ByVal myNumber As Integer)
MsgBox myNumber
End Function
Function function_mit_ByRef_Parameter(ByRef myNumber As Integer)
myNumber = 123
End Function

Anzeige
AW: Dein Fehler im Forum,
19.04.2017 16:10:25
Gerd
Mike, war, hier Code zu zeigen, der mit deinem absolut nichts zu tun hat.
Das nächste mal bitte den vollständigen Orginalcode.
Gruß Gerd
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aufruf von Sub in Sub in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Sub in einem anderen Sub in Excel VBA aufzurufen, befolge die folgenden Schritte:

  1. Definiere das erste Sub: Beginne mit der Erstellung deines ersten Sub. Achte darauf, dass du die Parameter korrekt definierst.

    Sub Function1()
       Call Function2(123)
    End Sub
  2. Definiere das zweite Sub: Das zweite Sub sollte die Parameter empfangen, die du übergeben möchtest. Achte darauf, den Datentyp korrekt anzugeben.

    Sub Function2(ByVal Value As Integer)
       ' Logik hier
    End Sub
  3. Verwende die Call-Anweisung: Um das zweite Sub von dem ersten Sub aufzurufen, verwende die Call-Anweisung.

  4. Überprüfung der Argumente: Achte darauf, dass die übergebenen Argumente dem erwarteten Datentyp im zweiten Sub entsprechen.


Häufige Fehler und Lösungen

  • Fehler: Argumenttyp ByRef unverträglich: Dieser Fehler tritt auf, wenn der Datentyp des übergebenen Arguments nicht mit dem erwarteten Datentyp im Sub übereinstimmt. Stelle sicher, dass du den Datentyp korrekt angibst.

  • Lösung: Verwendung von Long statt Integer: Wenn du einen Wert übergibst, der größer ist als der erlaubte Bereich eines Integer (z. B. 123456), ändere den Typ im zweiten Sub auf Long.

  • Falsche Verwendung von ByVal und ByRef: Wenn du nicht möchtest, dass das ursprüngliche Argument verändert wird, verwende ByVal. Bei ByRef kann der Wert im aufrufenden Sub geändert werden, was zu unerwarteten Ergebnissen führen kann.


Alternative Methoden

  • Du kannst auch auf die Verwendung von Function statt Sub zurückgreifen, wenn du einen Wert zurückgeben möchtest. Hier ist ein Beispiel:

    Function CalculateValue(ByVal x As Integer) As Integer
       CalculateValue = x * 2
    End Function
    
    Sub Main()
       Dim result As Integer
       result = CalculateValue(5)
       MsgBox result
    End Sub
  • Eine alternative Möglichkeit, ein Sub aus einem anderen Sub aufzurufen, ist die Verwendung der Application.Run-Methode:

    Sub Main()
       Application.Run "Function2", 123
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen, das Aufrufen von Subs in VBA besser zu verstehen:

  1. Einfaches Beispiel:

    Sub Hauptprogramm()
       Call Unterprogramm1(10)
    End Sub
    
    Sub Unterprogramm1(ByVal Wert As Integer)
       MsgBox "Wert ist: " & Wert
    End Sub
  2. Beispiel mit ByRef:

    Sub Haupt()
       Dim i As Integer
       i = 5
       Call ErhöheWert(i)
       MsgBox i ' Wird 6 anzeigen
    End Sub
    
    Sub ErhöheWert(ByRef Zahl As Integer)
       Zahl = Zahl + 1
    End Sub

Tipps für Profis

  • Verwende aussagekräftige Namen: Benenne deine Subs und Parameter so, dass sie deren Funktion klar beschreiben, um Verwirrung zu vermeiden.

  • Nutze Option Explicit: Damit stellst du sicher, dass alle Variablen deklariert werden, was die Fehlersuche erleichtert.

  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Logik deiner Subs zu erklären, insbesondere bei komplexen Aufrufen.


FAQ: Häufige Fragen

1. Kann ich ein Sub aus einem anderen Workbook aufrufen?
Ja, du kannst ein Sub aus einem anderen Workbook aufrufen, indem du den Workbook-Namen in der Application.Run-Methode angibst.

2. Was ist der Unterschied zwischen Sub und Function in VBA?
Ein Sub führt eine Aktion aus, während eine Function einen Wert zurückgibt. Verwende Function, wenn du Ergebnisse benötigst, die du weiterverarbeiten möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige