Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro soll einen Wert/Parameter zurückgeben

Makro soll einen Wert/Parameter zurückgeben
Holger
Hallo,
ich kann einem makro einen oder mehrere Werte mitgeben in dem ich in der Definition des Makros in Klammern die Werte eintrage.
Aber in meinem Fall habe ich ein Makro. In diesem wird ein Makro ausgeführt, ich übergebe dazu zwei Parameter. Nun soll dieses Makro an das ursprüngliche Makro einen Wert (string) zurückgeben, nachdem es gelaufen ist.
Wie geht sowas?
Ich kann es nur in die eine, aber nicht in die andere Richtung.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
als byRef deklarieren.
24.06.2010 15:31:49
Tino
Hallo,
deklariere im Makro die Variable als ByRef.
Sub Makro1()
Dim Ergebnis As Double
Makro2 Ergebnis
MsgBox Ergebnis
End Sub
Sub Makro2(ByRef Wert As Double)
Wert = 100
End Sub
Ist aber Normalerweise Standart und muss nicht angegeben werden.

Sub Makro1()
Dim Ergebnis As Double
Makro2 Ergebnis
MsgBox Ergebnis
End Sub
Sub Makro2(Wert As Double)
Wert = 100
End Sub
Das Gegenstück ist ByVal
Gruß Tino
du erstaunst mich
24.06.2010 15:41:49
Rudi
Hallo Tino,
das wusste ich bislang nicht. Ist gemerkt.
Gruß
Rudi
kann auch wichtig sein
24.06.2010 15:55:56
Tino
Hallo,
daher kann es auch mal ungewollt zu falschen Ergebnissen kommen.
Angenommen man übergibt eine Variable an eine Sub oder Function und
will aber in der eigentlichen Sub mit dem unveränderten Wert arbeiten.
Nun wird der Wert in der aufgerufenen Prozedur verändert und
weil ich nicht mit byVal deklariert habe, hat die Variable dessen Wert ich eigentlich
nicht verändern möchte geändert.
Beispiel zum spielen
'Beispiel 1 byRef = Standard ********* 
Sub Beispiel1()
Dim Ergebnis As Double

Ergebnis = 5
Makro2 Ergebnis
MsgBox Ergebnis

End Sub

Sub Makro2(Wert As Double)
    Wert = Wert * 5
End Sub


'Beispiel 2 byVal ********************* 
Sub Beispiel2()
Dim Ergebnis As Double

Ergebnis = 5
Makro4 Ergebnis
MsgBox Ergebnis

End Sub

Sub Makro4(ByVal Wert As Double)
    Wert = Wert * 5
End Sub

Gruß Tino
Anzeige
Danke
24.06.2010 16:13:04
Rudi
Hallo,
so lernt man als alter Esel noch das Tanzen ;-)
Gruß
Rudi
Du musst zwar hier nicht alles lesen,...
25.06.2010 15:25:23
Luc:-?
…Rudi,
aber doch das Richtige, dann hättest du das längst gewusst… ;-))
Gruß+schöWE, Luc :-?
Dank auch an dich ...
25.06.2010 23:36:20
Rudi
Hallo Luc,
... für deinen wie (fast) immer treffenden als auch bissigen Kommentar. Auch ;-))
Auch dir ein schönes WE
Gruß
Rudi
Verstehe ich nicht
24.06.2010 15:43:09
Holger
Hallo,
ich kapiere es leider noch nicht ganz.
Sub Makro1
Makro2(strDate) ' hier übergebe ich dem Makro 2 den Inhalt von strDate
End Sub

Sub Makro 2(Datum as string, byRef PfadName as string)
Pfadname = "irgendwas"
End Sub
Es klappt so nicht, denn in Makro1 ist der Wert von PfadName immer noch nicht bekannt!
Anzeige
gebe diese als Optional an.
24.06.2010 16:04:19
Tino
Hallo,
Sub Makro1()
Dim strPfad$, strDate$
'so *******************
Call Makro2(, strPfad$)
MsgBox strPfad
strPfad = ""
'oder so ********************
Call Makro2(strDate, strPfad$)
MsgBox strPfad
End Sub
Sub Makro2(Optional Datum As String, Optional ByRef PfadName As String)
PfadName = "irgendwas"
End Sub
So kannst Du beide Parameter übergeben, musst aber nicht.
Wenn Du einen Parameter übergeben willst, geben den Optionalen am Schluss ein.
Sub Makro1()
Dim strPfad$, strDate$
'so *******************
Call Makro2(strPfad$)
MsgBox strPfad
strPfad = ""
'oder so ********************
Call Makro2(strPfad$, strDate)
MsgBox strPfad
End Sub
Sub Makro2(ByRef PfadName As String, Optional Datum As String)
PfadName = "irgendwas"
End Sub
PS: byRef ist die Standardeinstellung und muss nicht angegeben werden.
Gruß Tino
Anzeige
Vielleicht so besser?
24.06.2010 18:23:46
Erich
Hallo Holger,
schau dir das mal an:

Sub Makro1()
Dim strDate As String
Dim strPfad As String
strDate = "heute"
Makro2 strDate, strPfad
' oder
Call Makro2(strDate, strPfad)
MsgBox "und hier ist: " & strPfad
End Sub
Sub Makro2(strDa As String, PfadName As String)
PfadName = "Wir gehen " & strDa & " ins Kino!"
End Sub
Makro2 hat 2 Parameter - so hattest du das auch geschrieben.
(Den Variablennamen "Datum" habe ich durch "strDa" ersetzt, "Datum" ist der Name einer Excelfkt.)
Makro2 ändert den 2. Parameter "PfadName" - das ist ja gerade sein Zweck.
Dafür braucht es wohl auch den 1. Parameter - sonst wäre der ja nutzlos.
Also erwartet Makro2, dass es mit 2 Parametern aufgerufen wird.
Mit dem 1. Parameter wird ein (Datums-)String übergeben.
Der 2. Parameter kann leer sein - er soll ja durch Makro2 gefüllt werden.
Nach dem Aufruf steht das, was in Makro2 als PfadName berechnet wurde,
in der Variablen strPfad in Makro1.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Makro soll einen Wert/Parameter zurückgeben
24.06.2010 15:33:39
Rudi
Hallo,
evtl. das 2.Makro als Function definieren und im ersten dann
MeinWert=MeineFunktion(Param1, Param2)
oder MeinWert als Public deklarieren.
Gruß
Rudi

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige