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

Variable von einer Sub zur andern übertragen

Forumthread: Variable von einer Sub zur andern übertragen

Variable von einer Sub zur andern übertragen
09.10.2002 13:25:58
Stoneguard (Armin Steiner)
Ich arbeite mit lokalen Variablen. Ich möchte jedoch nun eine Variable in eine Subroutine mitnehmen, die durch jene aufgerufen wird, woher die Variable stammt.

wie ann ich das realisieren? muss ich beim aufrufen der neuen subroutine irgendwie definieren, dass die variable xy mitgenommen werden soll?

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Variable von einer Sub zur andern übertragen
09.10.2002 13:36:28
Volker Croll
Hallo Armin,

dafuer brauchts Du eine Public-Variable; wird oberhalb des Makros definiert, z.B:

Public DeineVariable_XY As String
-------------------------------------
Sub DeinMakro ()

'hier Dein Code

End Sub

Der Inhalt einer Public-Variablen steht zur Verfuegung, solange die Datei geoeffnet ist.

Gruss Volker

Anzeige
Re: Variable von einer Sub zur andern übertragen
09.10.2002 13:37:06
MAlexander
Moin.

Das ist das Prinzip:

Sub Test1()
Dim VariableZumBearbeiten as String
VariableZumBearbeiten = "Dieser Wert soll gelöscht werden"
Test2 VariableZumBearbeiten
MsgBox VariableZumBearbeiten
End Sub

Sub Test2(ÜbernommeneVariable as String)

ÜbernommeneVariable = ""

End Sub

MAlexander

Anzeige
Nachtrag
09.10.2002 13:39:38
MAlexander
Publics sind nicht ungefährlich, wegen möglicher Seiteneffekte;
und warum auch, wenn's sicherer geht.

MAlexander

Schade
09.10.2002 13:41:45
Stoneguard(Armin Steiner)
dies wollte ich eigentlich vermeiden.. :-)

beim turbo pascal beispielsweise konnte man dies tun, wenn man bei de sub hinten in klammer die variable mitliefert, aber dies scheint hier wohl nicht zu gehen....

schade, aber trotzdem danke

Anzeige
Re: Nachtrag
09.10.2002 13:45:21
Armin Steiner
Danke
Re: Schade
09.10.2002 13:47:04
MAlexander
... eben, wie bei VBA auch

MAlexander

Re: Nachtrag
09.10.2002 13:48:36
Ralf Sögel
byref ist auch nicht ganz ungefährlich, dann schon besser byval
Anzeige
2 oder mehrere variablen?
09.10.2002 13:49:03
Armin Steiner
Nochmals Danke, aber wie kann ich 2 variablen oder mehrere Übermitteln?
Re: 2 oder mehrere variablen?
09.10.2002 13:55:27
Armin Steiner
habs rausbekommen... komma zwischen de klammern und nicht nur eine klammer....
"Seiteneffekte" ? Bitte Aufklaerung ...
09.10.2002 13:57:18
Volker Croll
Hallo MAlexander,

was meinst Du mit "Seiteneffekte"? Hatte bisher keine Probleme mit Publics.

Gruss Volker

Anzeige
Re: "Seiteneffekte" ? Bitte Aufklaerung ...
09.10.2002 14:06:28
MAlexander
Seiteneffekte sind ungewollte Nebeneffekte.

Diese müssen ja auch nicht unbedingt auftreten.
Beispiel:
Global Betrag as Currency
Verwendet man jetzt häufig "Betrag" für bspw. verschiedene Währungen, dann kann es ja durchaus vorkommen, daß eine Routine x "Betrag" verwendet, ohne diesen vorher zu initialisieren also munter mit dem alten Wert weiter rechnet (was logischerweise ein Programmierfehler ist !).
Bei Global ist es deshalb nicht immer einfach zu entscheiden und festzustellen, wo ein Resultat eigentlich herkommt.

Deshalb vermeide ich Globals so weit wie möglich.

MAlexander

Anzeige
Re: 2 oder mehrere variablen?
09.10.2002 14:11:05
MAlexander
Auf die gleiche Weise:

test2 Par1, Par2, Par3, Par4

für

sub test2´(Par1 as string,Par2 as currency, Par3 as double, Par4 as date)

Du kannst auch optionale Parameter angeben (auch mit Default-Werten).

Du kannst aber auch was ganz anderes machen, was die Felexibilität ganz enorm erhöht:

ParamArray

Für Dir mal die VBA-Hilfe zu gemüte, da gibt es zig Beispiele.

MAlexander

Anzeige
So gesehen, ja ...
09.10.2002 14:14:14
Volker Croll
Hallo MAlexander,

wenn Du mit "Seiteneffekte" meinst, dass evtl. die Fehlersuche nach eigenen Programierfehlern schwieriger wird, dann o.k. Aber ansonsten kann man mit Publics manchen Code auch straffen und sogar einen Tick beschleunigen.

Danke, Volker

Re: Nachtrag
09.10.2002 14:15:41
MAlexander
ABER GANZ SICHER !!!
Was ich damit (ByRef) schon für Böcke geschossen habe, paßt auf keine Kuhhaut.

MAlexander

Anzeige
Re: So gesehen, ja ...
09.10.2002 14:19:48
MAlexander
ÜBERHAUPT keine Frage und wenn es keine Publics geben würde, währen manche Probleme nur sehr umständlich zu lösen.
Insbesondere sehe ich hier wesentliche Erleichterungen bei den Public Const.

MAlexander

;
Anzeige

Infobox / Tutorial

Variablen zwischen Subroutinen in Excel VBA übertragen


Schritt-für-Schritt-Anleitung

Um eine Variable von einer Subroutine zu einer anderen zu übertragen, kannst du entweder eine Public-Variable verwenden oder die Variable als Parameter übergeben. Hier sind die Schritte:

  1. Public-Variable definieren:

    Public DeineVariable_XY As String
  2. Variable in der ersten Subroutine setzen:

    Sub Test1()
       DeineVariable_XY = "Wert von Test1"
       Test2
    End Sub
  3. Variable in der zweiten Subroutine nutzen:

    Sub Test2()
       MsgBox DeineVariable_XY
    End Sub
  4. Alternativ: Übergebe die Variable als Parameter:

    Sub Test1()
       Dim VariableZumBearbeiten As String
       VariableZumBearbeiten = "Dieser Wert soll gelöscht werden"
       Test2 VariableZumBearbeiten
       MsgBox VariableZumBearbeiten
    End Sub
    
    Sub Test2(ByVal ÜbernommeneVariable As String)
       ÜbernommeneVariable = ""
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Die Variable wird nicht erkannt.

    • Lösung: Stelle sicher, dass die Variable als Public deklariert ist oder als Parameter übergeben wird.
  • Fehler: Ungewollte Nebeneffekte bei Verwendung von Public.

    • Lösung: Verwende ByVal, um sicherzustellen, dass die ursprüngliche Variable nicht verändert wird.

Alternative Methoden

  • ParamArray verwenden: Mit ParamArray kannst du eine variable Anzahl von Argumenten an eine Subroutine übergeben.

    Sub Test3(ParamArray Variablen() As Variant)
       ' Hier kannst du die Variablen weiterverarbeiten
    End Sub
  • Optionale Parameter: Du kannst auch optionale Parameter in deiner Subroutine definieren, um mehr Flexibilität zu haben.

    Sub Test4(Optional ByVal OptionalVariable As String = "Standardwert")
       MsgBox OptionalVariable
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Variablen zwischen Subroutinen übergibst:

  • Beispiel 1: Einfache Übergabe:

    Sub Main()
       Dim Wert As String
       Wert = "Hallo Welt"
       Display Wert
    End Sub
    
    Sub Display(ByVal Nachricht As String)
       MsgBox Nachricht
    End Sub
  • Beispiel 2: Mehrere Variablen übergeben:

    Sub Haupt()
       Dim Name As String, Alter As Integer
       Name = "Max"
       Alter = 30
       ShowInfo Name, Alter
    End Sub
    
    Sub ShowInfo(ByVal Name As String, ByVal Alter As Integer)
       MsgBox "Name: " & Name & " Alter: " & Alter
    End Sub

Tipps für Profis

  • Verwende ByRef und ByVal gezielt: ByRef übergibt eine Referenz auf die Variable, was bedeutet, dass Änderungen auch die ursprüngliche Variable beeinflussen. ByVal hingegen übergibt eine Kopie, was sicherer ist, wenn du Änderungen vermeiden möchtest.

  • Vermeide Public Variablen, wenn möglich: Sie können zu ungewollten Seiteneffekten führen. Halte deine Variablen lokal, wo es sinnvoll ist.

  • Dokumentiere deine Subs: Kommentiere, was jede Subroutine macht, um die Nachvollziehbarkeit zu erhöhen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ByRef und ByVal? ByRef übergibt eine Referenz auf die ursprüngliche Variable, während ByVal eine Kopie übergibt, sodass Änderungen nicht die Originalvariable beeinflussen.

2. Wie kann ich mehrere Variablen in einer Subroutine übergeben? Du kannst mehrere Variablen einfach durch Kommata getrennt in den Klammern der Subroutine definieren, z.B. Sub Test2(Var1 As String, Var2 As Integer).

3. Sind Public Variablen gefährlich? Ja, Public Variablen können zu Seiteneffekten führen, da sie von jeder Subroutine im Modul oder sogar in anderen Modulen verändert werden können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige