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

Variablen zwischen Modulen übergeben

Forumthread: Variablen zwischen Modulen übergeben

Variablen zwischen Modulen übergeben
25.04.2018 12:06:10
Susanne
Hallo zusammen,
ich habe folgendes Problem: ich habe ein sehr umfangreiches Makro programmiert, doch als ich noch ein paar Zeilen hinzugefügt habe, kam die Meldung "Prozedur zu groß". Daraufhin habe ich das Makro nun "gesplittet" und jeweils einen Teil in 2 Module gepackt. Sub2 in Modul 2 rufe ich aus Sub1 mittels Call Sub2 auf.
Um das nun nutzen zu können, müsste ich allerdings Variablen zwischen den Modulen übergeben. Das habe ich bisher nicht hinbekommen. Kann mir da jemand helfen?
Oder alternativ eine andere Lösung ohne die beiden Module vorschlagen?
Vielen Dank schon mal im Voraus für eure Hilfe!
Liebe Grüße,
Susi
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen zwischen Modulen übergeben
25.04.2018 12:07:48
Hajo_Zi
Hallo Susi,
nach Option Explicit mit Public definieren.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Variablen zwischen Modulen übergeben
25.04.2018 12:33:01
Peter(silie)
Hallo,
verwende Types, Enums, ByVal, ByRef wenn Struktur und Übersicht gewünscht ist.
Verwende Public Variablen wenn Struktur und Übersicht egal sind.
Anzeige
AW: Variablen zwischen Modulen übergeben
25.04.2018 12:40:59
Rudi
Hallo,
Oder alternativ eine andere Lösung ohne die beiden Module vorschlagen?
Wahrscheinlich kommst du bei sauberer Programmierung (ohne Select und Activate, Verwendung von Schleifen, With-Rahmen etc) mit einem Modul aus.
Gruß
Rudi
Wieviele 1000 Zeilen sind "zu gross"
25.04.2018 12:50:57
mmat
Hallo (auch an alle anderen),
ich hab noch nie gehört, dass es so eine Fehlermeldung gibt. Eigentlich gehe ich davon aus, dass Excel hunderte, wenn nicht tausende von Zeilen pro Prozedur verkraftet.
Scheinbar lieg ich da falsch. Wer weiss näheres ?
Anzeige
AW: Wieviele 1000 Zeilen sind "zu gross"
25.04.2018 12:55:32
Rudi
Hallo,
64 kB je Modul sind die Grenze.
Hab ich aber auch mit etlichen 1000 Zeilen Code noch nicht geschafft.
Gruß
Rudi
Danke oT
25.04.2018 14:09:14
mmat
AW: Variablen zwischen Modulen übergeben
25.04.2018 13:48:56
Susanne
Hallo,
vielen Dank für die Hilfe. Habe es jetzt über Public gelöst, da es für mich die schnellste und einfachste Möglichkeit war.
Die Befehle "Select" und "Activate" kommen bei mir nicht vor, das war das Erste was ich mir abgewöhnt habe ;)
Allerdings benutze ich einige mehrdimensionale Arrays, da ich viele verschiedene Werte miteinander vergleichen und neu berechnen muss, ich denke das ist nicht gerade förderlich.
Danke nochmal!
Anzeige
Im Übrigen heißt 'Prozedur zu groß' nicht ...
25.04.2018 15:28:40
Luc:-?
Modul zu groß, Susi &all,
und ein Modul kann durchaus mehrere Prozeduren enthalten.
Und eine Meldung, dass ein Modul zu groß sei, habe ich auch noch nicht erhalten! VBA hat dann einfach bestimmte Prozeduren nicht mehr ausgeführt (unter Xl9/2k). Die andere Meldung, um die es hier eigentlich ging, hatte ich dagg schon mal abundan… ;-)
🙈 🙉 🙊 🐵 Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
;
Anzeige

Infobox / Tutorial

Variablen zwischen Modulen in Excel VBA übergeben


Schritt-für-Schritt-Anleitung

  1. Module erstellen: Öffne den VBA-Editor in Excel (Alt + F11) und erstelle zwei Module. Nenne sie z. B. Modul1 und Modul2.

  2. Variablen deklarieren: Deklariere die Variablen, die du zwischen den Modulen übergeben möchtest, in Modul1 als Public. Beispiel:

    Public meineVariable As Integer
  3. Wert zuweisen: In einer Subroutine in Modul1, weise der Variablen einen Wert zu:

    Sub Sub1()
       meineVariable = 10
       Call Sub2
    End Sub
  4. Variablen verwenden: In Modul2 kannst du die Variable direkt verwenden:

    Sub Sub2()
       MsgBox "Der Wert ist: " & meineVariable
    End Sub
  5. Makro ausführen: Führe Sub1 aus, um die gesamte Kette in Gang zu setzen.


Häufige Fehler und Lösungen

  • Fehlermeldung: „Prozedur zu groß“: Achte darauf, dass die Prozedur nicht zu viele Zeilen Code enthält. Teile den Code in mehrere Subroutinen auf.

  • Variable nicht gefunden: Stelle sicher, dass die Variable als Public deklariert ist und dass du den richtigen Modulnamen verwendest.

  • Wert bleibt leer: Überprüfe die Reihenfolge der Ausführung. Stelle sicher, dass die Variable vor ihrem Zugriff in Sub2 gesetzt wird.


Alternative Methoden

Falls du keine Public Variablen verwenden möchtest, kannst du auch ByRef oder ByVal verwenden:

  • ByRef: Übergebe die Variable als Referenz, um den Wert innerhalb der Subroutine zu ändern.

    Sub Sub1()
      Dim meineVariable As Integer
      meineVariable = 10
      Call Sub2(meineVariable)
    End Sub
    
    Sub Sub2(ByRef wert As Integer)
      MsgBox "Der Wert ist: " & wert
    End Sub
  • ByVal: Übergebe den Wert, ohne dass die Subroutine ihn ändern kann.


Praktische Beispiele

Hier ist ein einfaches Beispiel für die Übergabe von Variablen zwischen Modulen:

' Modul1
Public meineZahl As Integer

Sub SetzeWert()
    meineZahl = 42
    Call ZeigeWert
End Sub

' Modul2
Sub ZeigeWert()
    MsgBox "Der Wert ist: " & meineZahl
End Sub

Dieses Beispiel zeigt, wie du Werte zwischen Modulen übergeben kannst, um die Übersichtlichkeit und Struktur deines Codes zu verbessern.


Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler minimiert und die Lesbarkeit erhöht.

  • Module sinnvoll strukturieren: Halte verwandte Subroutinen in denselben Modulen, um die Wartbarkeit des Codes zu verbessern.

  • Vermeide Select und Activate: Nutze stattdessen direkte Referenzen auf Objekte, um die Effizienz deines Codes zu steigern.


FAQ: Häufige Fragen

1. Wie viele Variablen kann ich zwischen Modulen übergeben?
Es gibt keine feste Grenze, aber übermäßige Nutzung kann den Code unübersichtlich machen.

2. Was ist der Unterschied zwischen ByRef und ByVal?
ByRef übergibt die Adresse der Variablen, sodass Änderungen in der Subroutine auch die Originalvariable beeinflussen. ByVal übergibt eine Kopie des Wertes, Änderungen in der Subroutine wirken sich nicht aus.

3. Wie kann ich mehrdimensionale Arrays zwischen Modulen übergeben?
Deklariere das Array als Public, ähnlich wie bei Variablen. Beispiel:

Public meinArray(1 To 10) As Integer

Mit diesen Informationen solltest du in der Lage sein, Variablen zwischen Modulen in Excel VBA effektiv zu übergeben.

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