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

Forumthread: Variablen von einem Sub im anderen verwenden

Variablen von einem Sub im anderen verwenden
08.06.2006 13:28:31
einem
Hallo,
ich habe Variablen die in meinem Modul mehrfach in verschiedenen Subs gebraucht werden. Da ich nicht in jedem Sub den Ablauf zum zuweisen der Werte ausführen will , muss ich sie irgendwie in einem Sub zuweisen (?) und dann da abrufen wo ich die Werte brauche (Teilweise ändern sich die Werte in einem Sub)
Kann mir jemand erklären wie ich das so hinbekomme, oder vielleicht einen anderen Weg aufzeigen der besser wäre?
Gruß Thorsten
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 13:32:59
einem
Hallo,
deklariere die Variable außerhalb einer Sub.
Die Deklarationen innerhalb der Subs musst du löschen.
Gruß
Geist ist geil!
(Dies ist ein allgemeines Statement und nicht an bestimmte Personen gerichtet.)
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 13:36:56
einem
Hallo u_,
Variablen hab ich wie folgt außerhalb Deklariert:
Private iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer
Aber diesen Variablen fehlen noch die Werte, und diese muss ich in jedem Sub neu ermitteln. Das ist ja mein Problem, ich weis nicht wie ich den Variablen einen Wert zuweisen kann der in allen anderen Subs des Moduls auch zur verfügung steht, aber auch geändert werden kann während des ablaufs einzelner Subs.
Gruß Thorsten
Anzeige
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 13:40:32
einem
Hallo,
Variablen hab ich wie folgt außerhalb Deklariert:
doch hoffentlich im gleichen Modul.
Gruß
Geist ist geil!
(Dies ist ein allgemeines Statement und nicht an bestimmte Personen gerichtet.)
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 13:55:07
einem
Ja, im selben Modul.
Aber das Problem bleibt das selbe.
Anzeige
Lad doch mal die Mappe hoch. oT
08.06.2006 14:09:08
u_
AW: Lad doch mal die Mappe hoch. oT
08.06.2006 14:46:37
Thorsten
Ich habs jetzt so gemacht wie ich es eigentlich nicht wollte.
Die Variablen als Private außerhalb der Subs definiert und dann in einem Sub die Werte zugewiesen. Dieses Sub das die Werte zuweist rufe ich nun in jedem Sub auf in dem ich die Werte brauche.
Gruß Thorsten
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 14:28:07
einem
Die Variablen iRowDatBeg, iRowDatEnd und iRowWeek brauche ich im Sub cmdOK_Click() und UserForm_Initialize() im Sub ZeilenAuslesen() weise ich diesen Variablen die Werte zu die auch in den anderen Subs gebraucht werden. iRowWeek ändert sicht allerdings im Sub cmdOK_Click()
Hier ist der Code (kann komischerweise nicht uploaden):
Option Explicit
'Durchlaufvariablen deklarieren
Private i As Integer, i2 As Integer, i3 As Integer
Sub ZeilenAuslesen()
'Zeilen auslesen
Dim iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer
'unterhalb dieser Zeile Beginnen die Daten
iRowDatBeg = 3
'Ende der Daten suchen
iRowDatEnd = iRowDatBeg
Do While Cells(iRowDatEnd + 1, 1).Value "" And _
Cells(iRowDatEnd + 1, 1).Value "Woche"
iRowDatEnd = iRowDatEnd + 1
Loop
'String "Woche" suchen
iRowWeek = iRowDatEnd
Do Until Cells(iRowWeek, 1).Value = "Woche"
iRowWeek = iRowWeek + 1
Loop
UserForm_Initialize iRowDatBeg, iRowDatEnd, iRowWeek
End Sub

Private Sub cmdOK_Click()
If iRowWeek - iRowDatEnd < 2 Then
Rows(iRowDatEnd).Insert Shift:=xlDown
Range("A" & iRowDatEnd + 1 & ":AP" & iRowDatEnd + 1).Interior.ColorIndex = 0
Range("A" & iRowDatEnd + 1 & ":AP" & iRowDatEnd + 1).Borders.LineStyle = xlContinuous
i = 7
Do While Cells(iRowDatEnd, i).Interior.Pattern < 17 And i <= 41
i = i + 1
Loop
Cells(iRowDatEnd, i).Interior.Pattern = 17
iRowWeek = iRowWeek + 1
End If
End Sub


Private Sub UserForm_Initialize(iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer)
MsgBox iRowDatEnd
Dim aCProjektNr() As String
'Zeilen auslesen HINWEIS: Als Private außerhalb des Subs Definiert
'Dim iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer
'PROJEKT-NR#############################################################
'Projekt-Nr. als String in ein Array schreiben
For i = 0 To iRowDatEnd - iRowDatBeg - 1
ReDim Preserve aCProjektNr(i) As String
aCProjektNr(i) = Cells(i + 1 + iRowDatBeg, 2).Value
Next i
'neues TB anlegen und Array-Werte eintragen
Worksheets.Add After:=Worksheets(1)
For i = 0 To UBound(aCProjektNr)
Worksheets(2).Cells(i + 1, 1) = aCProjektNr(i)
Next i
'Projekt-Nr. Array mit hilfe der Excel Sortierfunktion über ein neues TB sortieren
Worksheets(2).Range("A" & UBound(aCProjektNr)).Sort Key1:=Range("A1"), _
Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
'Array Sortiert wieder einlesen
For i = 0 To UBound(aCProjektNr)
aCProjektNr(i) = Worksheets(2).Cells(i + 1, 1).Value
Next i
'Sortier-TB wieder löschen
Application.DisplayAlerts = False
Worksheets(2).Delete
Application.DisplayAlerts = True
'Dialog mit Projekt-Nr befüllen
For i = 0 To UBound(aCProjektNr)
Me.CProjektNr.AddItem (aCProjektNr(i))
Next i
'ENDE PROJEKT-NR########################################################
With Me
.cmdCancel.Cancel = True
.cmdOK.Default = True
End With
End Sub

Anzeige
AW: Variablen von einem Sub im anderen verwenden
08.06.2006 14:58:25
einem
Hallo,
DU HAST NICHTS VON EINER USERFORM GESCHRIEBEN, IN DER DU DIE VARIABLEN VERWENDEST! NUR VON EINEM MODUL!
Deklariere als Public.
Gruß
Geist ist geil!
(Dies ist ein allgemeines Statement und nicht an bestimmte Personen gerichtet.)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Variablen von einem Sub im anderen verwenden


Schritt-für-Schritt-Anleitung

  1. Deklaration von Variablen: Um Variablen in mehreren Excel VBA Subs zu verwenden, musst Du diese außerhalb der Subs deklarieren. Setze die Variablen als Private oder Public, je nach Bedarf:

    Private iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer
  2. Werte zuweisen: Weise den Variablen in einem Sub Werte zu, die anschließend in anderen Subs verwendet werden können. Hier ein Beispiel:

    Sub ZeilenAuslesen()
       iRowDatBeg = 3
       ' Logik zum Ermitteln der Werte...
       UserForm_Initialize iRowDatBeg, iRowDatEnd, iRowWeek
    End Sub
  3. Aufruf von Subs: Rufe die Subs, in denen die Variablen benötigt werden, auf, um die Werte zu verwenden. Beispiel:

    Private Sub cmdOK_Click()
       If iRowWeek - iRowDatEnd < 2 Then
           ' Weitere Logik...
       End If
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Variable nicht erkannt: Stelle sicher, dass die Variablen außerhalb der Subs im gleichen Modul deklariert sind. Wenn Du Private verwendest, sind diese nur im aktuellen Modul sichtbar. Verwende Public, wenn Du die Variablen in mehreren Modulen verwenden möchtest.

  • Fehler: Werte nicht zugewiesen: Achte darauf, dass Du die Variablen in einem Sub zuweist, bevor Du sie in anderen Subs verwendest. Andernfalls können sie leer oder falsch sein.


Alternative Methoden

  • Globale Variablen: Verwende Public für Variablen, die in verschiedenen Modulen benötigt werden. Diese Methode ist hilfreich, wenn Du eine UserForm oder mehrere Module verwendest.

  • Parameterübergabe: Du kannst Werte auch über Parameter an Subs übergeben, anstatt Variablen global zu deklarieren. Dies macht den Code klarer und modularer.


Praktische Beispiele

Hier ist ein Beispiel, wie Du die Variablen in einem Excel VBA Sub verwenden kannst:

Private Sub cmdOK_Click()
    If iRowWeek - iRowDatEnd < 2 Then
        Rows(iRowDatEnd).Insert Shift:=xlDown
        ' Weiterer Code...
    End If
End Sub

Private Sub UserForm_Initialize(iRowDatBeg As Integer, iRowDatEnd As Integer, iRowWeek As Integer)
    MsgBox iRowDatEnd
    ' Weiterer Code...
End Sub

In diesem Beispiel wird iRowWeek innerhalb des cmdOK_Click Subs modifiziert, nachdem es im UserForm_Initialize Sub initialisiert wurde.


Tipps für Profis

  • Verwende Option Explicit: Dies zwingt Dich, alle Variablen zu deklarieren, und hilft, Tippfehler zu vermeiden.

  • Nutze Kommentare: Dokumentiere Deinen Code gründlich, insbesondere wenn Du mit mehreren Subs arbeitest, um die Nachvollziehbarkeit zu verbessern.

  • Test und Debugging: Teste Deine Subs gründlich, um sicherzustellen, dass die Variablen korrekt zugewiesen und verwendet werden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Private und Public Variablen?
Private Variablen sind nur innerhalb des Moduls sichtbar, in dem sie deklariert sind. Public Variablen können in anderen Modulen verwendet werden.

2. Kann ich Variablen zwischen UserForms und Subs teilen?
Ja, wenn Du die Variablen als Public deklarierst, sind sie für alle Subs und UserForms im Projekt zugänglich.

3. Was passiert, wenn ich eine Variable in einem Sub ändere?
Wenn die Variable in einem Sub geändert wird, bleibt der neue Wert bis zur nächsten Zuweisung oder bis das Makro endet.

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