Registriert seit: 21.10.2014
	
 Version(en): 2013
	 
 
	
	
		Hallo liebe Experten und VBA-Granaten, ich habe folgendes Problem mit dem Rückgabewert von Funktionen: Code: Sub Funk() Debug.Print Testen(2, 2) End Sub
  Function Testen(x As Integer, y As Integer) x = x + 10 y = 2 * y Testen = x End Function
 Wie ihr seht werden der obigen Funktion Testen 2 Werte übergeben. Durch die Codezeile Testen = x besitzt die Funktion dann genau einen Rückgabewert. Ich möchte jetzt aber gerne wissen, was ich tun muß, damit die Funktion Testen nicht nur den neuen Wert für x, sondern auch den berechneten Wert für y zurückgibt. Also wie der Code auszusehen hat,  damit die Funktion Testen statt einem, zwei Rückgabewerte besitzt. Danke für eure Hilfe
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 01.11.2014
	
 Version(en): 2007, 2010
	 
 
	
	
		Hi, meinst Du das? Code: Function Testen(x As Integer, y As Integer)
  x = x + 10 y = 2 * y Testen = x & ", " & y
  End Function
 Gruß Max
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 10.04.2014
	
 Version(en): 97-2019 (32) + 365 (64)
	 
 
	
	
		Hallöchen, neben der Rückgabe als String kannst Du das auch als Array zurückgeben, oder Du nimmst globale variable, oder Du nutzt byref. Ich nehme beim Dim jetzt mal keine Rücksicht auf die typen. Code: Dim x, y
  Sub Funk() Dim retCode
  'Fuer globale Variablen retCode = Testen1(2, 2) Debug.Print "Testen1", x, y
  'Fuer byRef 'bea: gleicher Variablentyp in Sub und Function! u = 2: v = 2 retCode = Testen2(u, v) Debug.Print "Testen2", u, v
  'Fuer array retCode = Testen3(2, 2) Debug.Print "Testen3", retCode(0), retCode(1)
  End Sub
  Function Testen1(a As Integer, b As Integer) x = a + 10 y = 2 * b End Function
  Function Testen2(ByRef u, ByRef v) u = u + 10 v = 2 * v End Function
  Function Testen3(u As Integer, v As Integer) u = u + 10 v = 2 * v Testen3 = Array(u, v) End Function
  'usw.
  
	 
	
	
.      \\\|///      Hoffe, geholfen zu haben.        ( ô ô )      Grüße, André aus G in T     ooO-(_)-Ooo    (Excel 97-2019+365)
 
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
	  • Wulfi
 
 
 
	
	
	
		
	Registriert seit: 11.10.2014
	
 Version(en): 12/2007&14/2010
	 
 
	
	
		Sicher meint sie das nicht, Max, denn du erzeugst nur einen, aus 2 Werten zusammengebastelten Rückgabewert. Die richtige Lösung wäre hier bspw Testen = Array(x, y), wobei die UDF in Zellformeln dann als Matrixformel (über 2 nebeneinanderliegende Zellen) notiert werden muss, damit beide Werte auch angezeigt werden. Bei Aufruf in einer Subprozedur (wie hier gezeigt) muss eine Variable (hier varName) mit dem Funktionsergebnis belegt werden, für die dann der Ausdruckbefehl Debug.Print varName(1) & vbTab & varName(2) oder Debug.Print Join(varName, vbTab) lauten kann. Gruß, Castor
	 
	
	
	
	
 
	  
	Folgende(r) 2 Nutzer sagen Danke an Castor für diesen Beitrag:2 Nutzer sagen Danke an Castor für diesen Beitrag 28
	  • Wulfi, Rabe
 
 
 
	
	
	
		
	Registriert seit: 11.10.2014
	
 Version(en): 12/2007&14/2010
	 
 
	
	
		Ergänzung: Alternativ kann im konkreten Fall auch ohne zusätzliche Variable gearbeitet werden. Dann muss aber Debug.Print Join(Testen(x, y), vbTab) verwendet werden, wobei im gezeigten Bsp wohl x=y=2 interpretiert werden kann. Castor
	 
	
	
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an Castor für diesen Beitrag:1 Nutzer sagt Danke an Castor für diesen Beitrag 28
	  • Wulfi
 
 
 
	
	
	
		
	Registriert seit: 17.04.2014
	
 Version(en): MS Office 365(32)
	 
 
	
	
		Hallo Schülerin, es gibt da noch das Schlüsselwort  ParamArray: Code: Sub Funk()   Debug.Print Join(Testen(2, 2), ", ") End Sub
  Function Testen(ParamArray XY())   XY(0) = XY(0) + 10   XY(1) = XY(1) * 2   Testen = XY End Function
 Gruß Uwe
	  
	
	
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
	  • Wulfi
 
 
 
	
	
	
		
	Registriert seit: 17.04.2014
	
 Version(en): MS Office 365(32)
	 
 
	
		
		
		07.11.2014, 20:14 
(Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2014, 20:25 von Kuwer.)
		
	 
	
		Hallo Schülerin, hier noch mal erweitert für die Ausgabe in Zellen: Code: Sub Funk()   'Debug.Print Join(Testen(2, 2), ", ")   'Ausgabe in nebeneinanderliegenden Zellen   Range("B2:C2").Value = Testen(2, 2)   'Ausgabe in untereinanderliegenden Zellen   Range("B4:B5").Value = Application.Transpose(Testen(2, 2)) End Sub
  Function Testen(ParamArray XY())   XY(0) = XY(0) + 10   XY(1) = XY(1) * 2   Testen = XY End Function
 Gruß Uwe
	  
	
	
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
	  • Wulfi
 
 
 
	
	
	
		
	Registriert seit: 10.04.2014
	
 Version(en): 97-2019 (32) + 365 (64)
	 
 
	
	
		Hallöchen, und wenn man es flexibel haben will und in der Funktion nicht weiß, wieviel da auf einen zukommt und was gerechnet werden soll, dann so: Code: Sub FunkFlex()   Debug.Print Join(TestenFlex("2+10", "2*2"), ", ") End Sub
  Function TestenFlex(ParamArray XY()) Dim iCnt For iCnt = LBound(XY) To UBound(XY)   XY(iCnt) = Application.Evaluate(XY(iCnt)) Next TestenFlex = XY End Function
  
	 
	
	
.      \\\|///      Hoffe, geholfen zu haben.        ( ô ô )      Grüße, André aus G in T     ooO-(_)-Ooo    (Excel 97-2019+365)
 
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
	  • Wulfi
 
 
 
	 
 |