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

Forumthread: Variable von Sub an Modul übergeben

Variable von Sub an Modul übergeben
02.02.2020 16:32:58
Sub
Hallo zusammen,
ich benötige bitte mal eure Hilfe bei der Übergabe von Variablen von einer Sub an die andere.
In einem Modul rufe ich eine Sub auf und möchte anschließend mit der darin verarbeiteten Variable weiterarbeiten. Aufgrund von stetigen Neuberechnungen können die variablen nicht als public deklariert werden. welche anderen Möglichkeiten gibt es? Vielen Dank schon mal
Ganz einfach ausgedrückt:
Sub Berechnung1
Dim Summe as Double
Dim Anzahl as Integer
Call Basiswert
Summe = Anzahl x Typ
MsgBox Summe
End sub
Sub Basiswert
Dim Typ as Double
Dim Wert as Integer
Wert = "55"
Typ = 15 x Wert
End sub

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 16:35:07
Sub
Makro4 Typ
Makro4(LoWert as Long)

AW: Variable von Sub an Modul übergeben
02.02.2020 17:24:14
Sub
Leider sagt mir das nur Bahnhof :(
AW: Variable von Sub an Modul übergeben
02.02.2020 17:25:42
Sub
das das wort Sub vor Makro4 stehen muss habe ich als bekannt angenommen.
Gruß Hajo
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 16:40:58
Sub
Hi
z.B.
Sub Berechnung1()
Dim Summe as Double
Dim Anzahl as Integer
Anzahl = 3
Summe = Anzahl x Basiswert(55)
MsgBox Summe
End Sub

Function Basiswert(intWert As Integer) As Double
Basiswert = 15 x intWert
End Sub
cu
Chris
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 17:27:59
Sub
Hi Chris,
danke für deine schnelle Antwort. Das Beispiel war relativ einfach gefasst.. In meinem Modul werden über die Call Aufforderung div. Array eingelesen, die anschließend an das bereits laufende Modul übergeben werden und anschließend in einer Userform ausgegeben werden. Ich hab versucht das über deinen Lösungsansatz der Function darzustellen, bekomme es leider aber nicht hin :( Irgend eine andere Idee?
Aktuell wird der Wert der korrekt in der Sub ins Array eingelesen wird, in der Userform als "0" dargestellt.
Danke & LG
Stefan
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 17:36:55
Sub
Hallo Stefan,
ein Beispiel für ein Array:
Option Explicit

Public Sub Beispiel()
    Dim astrarray() As String
    Dim ialngIndex As Long
    Call Test(astrarray)
    For ialngIndex = LBound(astrarray) To UBound(astrarray)
        MsgBox astrarray(ialngIndex)
    Next
End Sub

Private Sub Test(ByRef prastrArray() As String)
    Redim prastrArray(2)
    prastrArray(0) = "eins"
    prastrArray(1) = "zwei"
    prastrArray(2) = "drei"
End Sub

Gruß
Nepumuk
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 18:50:40
Sub
Hi Nepumuk,
danke für deine schnelle Hilfe. Ich habe eben deinen Code kopiert und er funktioniert hervorragend.
Wie verhält sich der Code sobald das Array vom Format Integer und nicht String ist?
Ich erhalte aktuell eine Fehlermeldung:
Unverträglicher Datentyp: Datenfeld oder Benutzerdefinierter Typ erwartet
Danke & LG
Stefan
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 19:12:48
Sub
Hallo Stefan,
so:
Public Sub Beispiel()
    Dim aintArray() As Integer
    Dim ialngIndex As Long
    Call Test(aintArray)
    For ialngIndex = LBound(aintArray) To UBound(aintArray)
        MsgBox aintArray(ialngIndex)
    Next
End Sub

Private Sub Test(ByRef praintArray() As Integer)
    Redim praintArray(2)
    praintArray(0) = 1
    praintArray(1) = 2
    praintArray(2) = 3
End Sub

Gruß
Nepumuk
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 19:12:49
Sub
Hallo Stefan,
so:
Public Sub Beispiel()
    Dim aintArray() As Integer
    Dim ialngIndex As Long
    Call Test(aintArray)
    For ialngIndex = LBound(aintArray) To UBound(aintArray)
        MsgBox aintArray(ialngIndex)
    Next
End Sub

Private Sub Test(ByRef praintArray() As Integer)
    Redim praintArray(2)
    praintArray(0) = 1
    praintArray(1) = 2
    praintArray(2) = 3
End Sub

Gruß
Nepumuk
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 19:39:49
Sub
Hi Nepumuk,
ich hatte bei deinem ersten Code das Private Sub und Public Sub überlesen. Nun erscheint eine andere Fehlermeldung.
Sub oder Function nicht definiert. Woran könnte das liegen?
Im Modul ruf ich die Funktion wie folgt auf:
Dim Anzahl_Trades2() As Integer
Call Test(Anzahl_Trades2)
Und die Private Sub lautet:
Option Explicit
Public wb_TJ As Workbook
Private Sub Test(ByRef Anzahl() As Integer)
Dim letzteZeileNeuesArray As Long
Dim vArr1 As Variant
Set wb_TJ = Workbooks("Trading_Journal.xlsx")
letzteZeileNeuesArray = wb_TJ.Worksheets("Tabelle1").Range("A" & Rows.Count).End(xlUp).Row
vArr1 = wb_TJ.Worksheets("Tabelle1").Range("N2:N" & letzteZeileNeuesArray).Value
ReDim Anzahl(0)
Anzahl(0) = Application.WorksheetFunction.Sum(vArr1)
End Sub
Danke für deine Hilfe
Anzeige
AW: Variable von Sub an Modul übergeben
02.02.2020 20:16:30
Sub
Konnte es eben selbst lösen :) Trotzdem vielen lieben Dank für das Aufzeigen des Lösungsweges!
;
Anzeige
Anzeige

Infobox / Tutorial

Variablen von Sub an Modul übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Definiere die Sub und die Variablen: Lege in deiner Sub die Variablen fest, die du übergeben möchtest. Stelle sicher, dass sie im richtigen Datentyp deklariert sind.

    Sub Berechnung1()
       Dim Summe As Double
       Dim Anzahl As Integer
       Anzahl = 3
       Summe = Anzahl * Basiswert(55)
       MsgBox Summe
    End Sub
  2. Erstelle eine Funktion für die Berechnung: Anstatt eine andere Sub zu verwenden, erstelle eine Funktion, die den Wert zurückgibt. Dies ermöglicht eine einfache Übergabe von Werten.

    Function Basiswert(intWert As Integer) As Double
       Basiswert = 15 * intWert
    End Function
  3. Rufe die Sub auf: Verwende den Funktionsaufruf in deiner Sub, um die Berechnung durchzuführen und den Wert zu erhalten.

  4. Übergebe Arrays mit ByRef: Wenn du ein Array übergeben möchtest, solltest du es mit ByRef übergeben, damit Änderungen innerhalb der Sub auch im Hauptmodul sichtbar sind.

    Public Sub Beispiel()
       Dim aintArray() As Integer
       Call Test(aintArray)
       ' Verwende das Array hier
    End Sub
    
    Private Sub Test(ByRef praintArray() As Integer)
       ReDim praintArray(2)
       praintArray(0) = 1
       praintArray(1) = 2
       praintArray(2) = 3
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Unverträglicher Datentyp": Stelle sicher, dass der Datentyp des Arrays in der Sub und der Funktion übereinstimmt. Verwende den gleichen Datentyp (z.B. Integer oder String).

  • Fehler: "Sub oder Function nicht definiert": Dieser Fehler tritt auf, wenn du versuchst, eine Sub oder Funktion aufzurufen, die nicht im aktuellen Modul sichtbar ist. Überprüfe, ob die Sub als Public deklariert ist.


Alternative Methoden

Eine andere Möglichkeit, Variablen zwischen Subs zu übergeben, ist die Verwendung von Public Variablen in einem Modul. Dies funktioniert jedoch nur, wenn die Variablen nicht ständig geändert werden müssen.

Public Typ As Double
Public Sub SetzeTyp()
    Typ = 15 * 55
End Sub

Rufe die SetzeTyp-Sub auf, bevor du auf die Public-Variable zugreifst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Übergabe von Variablen in Excel VBA zu demonstrieren:

Public Sub Haupt()
    Dim Ergebnis As Double
    Ergebnis = Berechnung(5)
    MsgBox "Das Ergebnis ist: " & Ergebnis
End Sub

Private Function Berechnung(Wert As Integer) As Double
    Berechnung = Wert * 10
End Function

Hierbei wird die Berechnung-Funktion aufgerufen und das Ergebnis direkt in der Haupt-Sub verwendet.


Tipps für Profis

  • Verwende Module effektiv: Überlege dir, wie du deine Subs und Funktionen strukturierst. Halte verwandte Subs in einem Modul zusammen, um die Lesbarkeit zu erhöhen.

  • Verwende ByRef und ByVal: Überlege, ob du eine Variable durch Referenz (ByRef) oder durch Wert (ByVal) übergeben möchtest, um unerwünschte Änderungen zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ByRef und ByVal? ByRef übergibt eine Referenz auf die Variable, während ByVal eine Kopie der Variable übergibt. Änderungen an einer ByRef-Variable wirken sich auf die Originalvariable aus.

2. Kann ich Variablen zwischen verschiedenen Modulen übergeben? Ja, du kannst Public-Variablen in einem Modul definieren und sie in anderen Modulen verwenden, solange sie korrekt deklariert sind.

3. Wie kann ich mehrere Variablen auf einmal übergeben? Du kannst ein Array oder ein benutzerdefiniertes Datentyp-Array verwenden, um mehrere Variablen in einer einzigen Übergabe zu kombinieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige