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

Forumthread: Variablen an Submakro übergeben

Variablen an Submakro übergeben
06.04.2009 16:22:50
Claus
Guten Tag liebe Excelianer!
Man kann doch einen Makro als Unterprogramm eines anderen Makros nutzen. Z.B.: Application.Run "DateiX.xls!Submakro"
oder auch mit Call.... (was ist da eigentlich der Unterschied?)
Nun mein Problemchen: Der Submakro soll mit Varianlen (Dim vx as Variant) arbeiten, die aus den übergeordneten Makros stammen. Die werden mir aber jetzt beim Aufruf des Submakros geleert. Gibt es eine Möglichkeit, die Variablen zu übernehmen?
Vielen Dank schon mal und liebe Grüße
Claus
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Variablen an Submakro übergeben
06.04.2009 16:26:01
Hajo_Zi
Hallo Claus,
Application.Run mit Variablen
Application.Run "PERSONAL.XlSB!MarkBerIdenfiz", 1, 2, 3, 4

AW: Variablen an Submakro übergeben
06.04.2009 16:27:30
Ptonka
Hallo Claus,
Du schreibst oberhalb aller Makros folgende Deklarierung der Variablen:
Public Textvariable1 as String
oder
Public Zahlenvariable as Integer
Dann werden alle Varialen auch gefüllt übernommen.
Gruß,
Ptonka
Anzeige
AW: Variablen an Submakro übergeben
06.04.2009 16:33:50
D.Saster
Hallo,

was ist da eigentlich der Unterschied?


mit Application.Run kannst du Makros aus anderen Dateien aufrufen. Mit Call nur aus der gleichen.
Du kannst die Variablen entweder global definieren, dann bleiben sie erhalten, oder du übergibst sie als Parameter an das andere Makro


sub Makro1()
dim strTest as string
strTest="Test"
Call Makro2 (strTest)
End sub
Sub Makro2(strMldg as string)
Msgbox strMldg
End Sub

Gruß
Dierk

Anzeige
AW: Variablen an Submakro übergeben
06.04.2009 16:58:56
Claus
allo Hajo, Ptonka und Dierk (deine Antwort kann man ja nur als disaströs bezeichnen, eieiei - quatsch, war ein Späßle bzgl deines nicks)
vielen Dank, das waren jetzt genau die Infos die ich wollte. Dann wede ich meine Variablen global definieren.
Allerdings benötige ich Kommazahlen, heißt es dann anstatt "Public Zahlenvariable as Integer" : "Public Zahlenvariable as Variant" ?
Dann wäre ich ja flexibel und kann diese Variablen zwischen vielen verschiedenen Makros austauschen - genau das brauche ich.
Danke auch für die Erklärung des Unterschiedes zw. run und call. Das ist in meinem Beispiel nicht relevant, dann nehme ich weiterhin run und wähle meine Makronamen so ausführlich, daß diese nicht zufällig mehrfach vorkommen.
Also herzlichen Dank für 3 superschnelle Lösungen.
Grüßle Claus
Anzeige
AW: Variablen an Submakro übergeben
06.04.2009 17:01:53
Hajo_Zi
Hallo Claus,
ich vermute mal, wenn Du die Variable in der einen Datei als Public definiertst, sind Sie in der anderen nicht da. Aber teste es.
Gruß Hajo
AW: Variablen an Submakro übergeben
06.04.2009 19:13:16
Nepumuk
Hallo Claus,
lass das lieber bleiben mir "Variablen global definieren". Da verlierst du schnell den Überblick. Benutze besser die Variante, welche Dirk vorgeschlagen hat, nämlich die Variablen als Parameter zu übergeben.
Der große Unterschied zwischen Call und Run ist, Run kann keine Variablen zurückgeben. Beispiel:
Public Sub Aufruf()
    Dim intValue As Integer
    Call Test(intValue)
    MsgBox intValue
    intValue = 0
    Application.Run "Test", intValue
    MsgBox intValue
End Sub

Public Sub Test(intValue As Integer)
    intValue = 666
End Sub

Nur wenn du per Run-Methode eine Funktion aufrufst, kann dir diese einen einzigen Wert zurückgeben.
Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Variablen an Submakros übergeben in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine VBA-Variable an ein Submakro zu übergeben, kannst du folgende Schritte befolgen:

  1. Deklaration der Variablen: Deklariere deine Variablen entweder lokal im Sub oder global, wenn du die Variablen in mehreren Submakros verwenden möchtest. Beispiel für eine globale Variable:

    Public myVar As Variant
  2. Wert zuweisen: Weise der Variablen einen Wert zu, bevor du das Sub aufrufst:

    myVar = "Hallo Welt"
  3. Submakro aufrufen: Du kannst das Submakro mit der Call-Anweisung oder mit Application.Run aufrufen:

    Call MySub(myVar)

    oder

    Application.Run "MyWorkbook.xls!MySub", myVar
  4. Parameter im Submakro definieren: Definiere die Parameter im Submakro, um die übergebenen Variablen zu empfangen:

    Sub MySub(ByVal param As Variant)
       MsgBox param
    End Sub

Häufige Fehler und Lösungen

  • Variable bleibt leer: Wenn du eine VBA-Variable übergibst und sie im Submakro leer bleibt, stelle sicher, dass die Variable korrekt deklariert und zugewiesen wurde, bevor das Sub aufgerufen wird.

  • Unterschied zwischen Call und Application.Run: Der Hauptunterschied besteht darin, dass Application.Run auch Makros aus anderen Arbeitsmappen aufrufen kann, während Call nur für Makros innerhalb der gleichen Arbeitsmappe funktioniert.

  • Globale Variablen: Wenn du globale Variablen verwendest, achte darauf, dass sie in der richtigen Datei deklariert sind, da sie in anderen Arbeitsmappen nicht sichtbar sind.


Alternative Methoden

Eine alternative Methode, um Parameter in VBA zu übergeben, ist die Verwendung von ByRef und ByVal:

  • ByRef: Überträgt die Referenz der Variable, sodass Änderungen im Submakro auch die ursprüngliche Variable beeinflussen.
  • ByVal: Überträgt eine Kopie der Variable, sodass Änderungen im Sub keine Auswirkungen auf die ursprüngliche Variable haben.

Beispiel:

Sub Main()
    Dim num As Integer
    num = 10
    ChangeValue num ' ByVal
    MsgBox num ' Gibt 10 aus

    ChangeValueRef num ' ByRef
    MsgBox num ' Gibt 20 aus
End Sub

Sub ChangeValue(n As Integer)
    n = n + 10
End Sub

Sub ChangeValueRef(ByRef n As Integer)
    n = n + 10
End Sub

Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele:

  1. Übergeben von mehreren Parametern:

    Sub Main()
       Dim name As String
       Dim age As Integer
    
       name = "Max"
       age = 30
       Call ShowInfo(name, age)
    End Sub
    
    Sub ShowInfo(ByVal name As String, ByVal age As Integer)
       MsgBox "Name: " & name & ", Alter: " & age
    End Sub
  2. Variablen von verschiedenen Typen übergeben:

    Sub Main()
       Dim myString As String
       Dim myNumber As Double
    
       myString = "Test"
       myNumber = 123.45
       Call ProcessData(myString, myNumber)
    End Sub
    
    Sub ProcessData(ByVal str As String, ByVal num As Double)
       MsgBox "String: " & str & ", Zahl: " & num
    End Sub

Tipps für Profis

  • Verwende Public Deklarationen: Wenn du Variablen in mehreren Modulen verwenden möchtest, ist die Verwendung von Public eine gute Praxis, um die Übersichtlichkeit zu bewahren.

  • Namen für Variablen: Achte darauf, aussagekräftige Namen für deine Variablen zu wählen, um den Code leserlicher zu gestalten.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungen, um unerwartete Probleme beim Übergeben von Variablen zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Parameter an ein Submakro übergeben? Du kannst mehrere Parameter in der Sub-Prozedur definieren und sie beim Aufruf des Submakros übergeben, z.B. Call MySub(param1, param2).

2. Was ist der Vorteil von ByRef und ByVal beim Parameterübergabe? ByRef erlaubt es, dass Änderungen innerhalb des Submakros die ursprüngliche Variable beeinflussen, während ByVal eine Kopie übergibt, sodass die ursprüngliche Variable unverändert bleibt.

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