Office: (Office 2013) VBA

Helfe beim Thema VBA in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe folgendes Problem. Ich möchte in einem makro eine Variable füllen und diese dann in einem anderen Makro nutzen, das Ganze jedoch ohne... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von mathieu_91, 3. Juli 2016.

  1. VBA


    Hallo,

    ich habe folgendes Problem.

    Ich möchte in einem makro eine Variable füllen und diese dann in einem anderen Makro nutzen, das Ganze jedoch ohne das ganze Public Gedöns.

    Folgendes Beispiel:

    Code:
    Die Main Sub wird gestartet, anschließend folgt die Befüllung von "Path" im Sub "GetPath".
    Wie ich von der Main in GetPath eine Variable bekomme, ist mir bewusst, so wie im Beispiel.

    Code:
    Nur wie bekomme ich die Variable wieder zurück und zwar befüllt?

    Grüße

    Mathieu

    :)
     
    mathieu_91, 3. Juli 2016
    #1
  2. Hi Mathieu,

    ...offenbar nicht. Denn wenn Path in Main noch unbekannt ist, dann kannst Du Path nicht an GetPfad als Parameter übergeben und auch nicht in GetPath als Parameter erwarten. Außerdem, wenn Du das Public vermeiden willst, dann muss GetPath den Pfad als Ergebnis zurückliefern, Das kann aber keine Sub sondern nur eine Function.
    Dennoch sollte in Main eine Variable Path deklariert werden.

    Bsp Code:
    Wie Du siehst, wird GetPath kein Parameter übergeben. Deshalb muss der Prozedurkopf von GetPath auch geändert werden. Und zwar so:
    Code:
    Innerhalb der Funktion ermittelst Du ja irgendwie den Wert, den Path annehmen soll (hab ich mir jetzt nicht angesehen). Diesen Wert muss die Funktion aber zurückliefern. Deshalb schreibst Du in die Zeile vor End Function das:
    Code:
     
  3. Hallo RJ,

    gut zu wissen und vielen Dank. Probiere ich gleich mal aus.

    Dachte immer man könnte Variablen mittels "ByRef" zurückschicken, aber das ist wohl nochmal etwas anderes.

    Edit: Und auch gleich das Feedback: Funktioniert super!

    Grüße

    Mathieu
     
    mathieu_91, 4. Juli 2016
    #3
  4. VBA

    ByRef und ByVal gehören zu einer ganz anderen Baustelle.

    Vorsicht auch bei Verwendung von ByRef, wenn man nicht weiß wie sich das auswirkt!

    Bei ByRef (Referenz = Verweis auf die Adresse) Variablen arbeitet man immer mit dem Original. Das bedeutet, Änderungen bleiben dauerhaft bestehen, weil der Wert, der an dieser (Original)Adresse gespeichert ist in diesem Fall auch geändert wird. Wenn man das will, dann ist alles in Ordnung, falls nicht, kann es ein böses Erwachen geben....*wink.gif*

    Mit ByVal (Value = dem Wert) arbeitet man dagegen mit einer Kopie der angegebenen Variablen. Man holt sich praktisch den Wert des Originals, verändert aber nur den Wert der Kopie. Das Original bleibt davon unberührt.

    Beides hat durchaus praktische Bedeutung, nur wie gesagt, man sollte wissen was man tut....*wink.gif*
     
  5. Hallo RJ,

    super Erklärung, vielen Dank hierfür.

    Grüße

    Mathieu
     
    mathieu_91, 4. Juli 2016
    #5
  6. Hallo Mathieu,

    viele Wege führen nach Rom.

    So ganz ohne Gedöns geht es halt nicht: In der Sub Main sollest Du die Variable Path (wie alle anderen auch - setze stets Option Explicit, am besten automatisch) schon deklarieren, um mit ihr weiter arbeiten zu können. Auf einen passenden Typ solltest Du Dich auch einigen, der dann auch insbesondere bei der hier notwendigen Übergabe ByRef übereinstimmen muss.

    Dennoch bin ich bei Ralf: Eine Function mit Rückgabewert finde ich übersichtlicher.

    Wenn Du im Dateidialog mehrere Dateien auswählen willst, ist diese Schleife übrigens sinnbefreit:
    Code:
    Übergeben wird ja immer die letzte - kannst die Mehrfachauswahl dann auch gleich unterbinden. Wenn Mehrfachauswahl gewünscht wird, kommst Du mit dem Variablentyp String nicht weit.

    Grüße
    EarlFred
     
    EarlFred, 5. Juli 2016
    #6
  7. Hallo EarlFred,

    danke, werde ich gleich mal ändern.
    Danke auch nochmal für den Input zur genannten Thematik.

    Grüße

    Mathieu
     
    mathieu_91, 5. Juli 2016
    #7
  8. VBA

    ..und das ganze noch mit Code, der die unterschiedlichen Arbeitsweisen gegenüberstellt:

    Code:
    Variante 1 mit Sub - möglich, aber die Änderung der Variable ist nur in Kenntnis der Sub möglich.

    Variante 2 mit Function: Hier ist die Zuweisung eines (neuen) Werts zu einer Variablen allein schon vom Code her leicht erkennbar.

    Grüße
    EarlFred
     
    EarlFred, 5. Juli 2016
    #8
Thema:

VBA

Die Seite wird geladen...
  1. VBA - Similar Threads - VBA

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. Listbox wird nicht breiter, Schriftgrösse ändert sich

    in Microsoft Excel Hilfe
    Listbox wird nicht breiter, Schriftgrösse ändert sich: Hallo, ich habe ein Formular dessen Breite ich mit der Maus ändern kann. Im Formular habe ich einen Rahmen und darin eine Listbox deren Breite an die Formularbreite angepasst wird....
  4. Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch

    in Microsoft Excel Hilfe
    Kontrollkästchen aktivieren ohne VBA - wenn KK1 angekreuzt dann KK2 auch: Hallo zusammen, erstmal danke für all die Tipps und Kniffe, die ich ohne eigenen Thread gefunden und gelernt habe. Leider finde ich mein Thema nirgendwo... Aktuell habe ich zwei Spalten mit...
  5. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  6. Bilder über VBA Größe und DPI ändern für Webshop

    in Microsoft Excel Hilfe
    Bilder über VBA Größe und DPI ändern für Webshop: Hallo Excel Spezialisten, Ich habe mir eine recht aufwendige Tabelle gebastelt, aus der ich Daten für meinen Webshop generiere und in einer .csv bereitstelle. Es werden neue Preislisten...
  7. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  8. Erstellung eines Dynamischen Kalenders (ggf. VBA)

    in Microsoft Word Hilfe
    Erstellung eines Dynamischen Kalenders (ggf. VBA): Guten Morgen an Alle, ich hoffe, es geht euch soweit gut :) Ich wende mich heute an euch, weil ich gerade vollkommen verzweifle und irgendwie so ganz und garnicht weiterkomme und irgendwie...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden