Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1248to1252
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

Variablen mehrdeutig definieren

Variablen mehrdeutig definieren
Dirk
Hallo Freunde,
Ich hatte mich gefragt, ob ich eine Variable "Mehrdeutig" definieren kann.
bei einer Funktion interessant
mir ist das vorhin aufegfallen als ich mal wieder in der Office97 Welt unterwegs war.
Dank nochmal an NoNet
und zwar ging es um die Function split, die ja aus einem Sting ein Array formt.
ich hatte (wieso auch immer) den text aber in einem Varian zusammengefasst.
die lief auf einen Fehler.
Meine Frage nun also (nur aus reiner Neugier) kann man eine Variable so definieren, das sie gleichzeitig Varian oder string sein kann?
Gruß
Dirk

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
VARIANT ist ja ein MEHRDEUTIGER Typ !
14.02.2012 17:52:09
NoNet
Hallo Dirk,
VARIANT ist doch gerade ein MEHRDEUTIGER Typ - im Gegensatz zu allen anderen Typen !
Teste doch mal folgenden Code und schau Dir das Ergebnis (auch die Titelzeile !) der jeweiligen MsgBox an :
Dim varX As Variant
Sub Test()
varX = 3 'Zuweisung GANZZAHL
MsgBox varX, , TypeName(varX)
varX = "Text" 'Zuweisung Text
MsgBox varX, , TypeName(varX)
varX = 3.14159265 'Zuweisung Dezimalzahl
MsgBox varX, , TypeName(varX)
varX = #2/14/2012# 'Zuweisung Datum
MsgBox varX, , TypeName(varX)
End Sub
Gruß, NoNet
AW: VARIANT ist ja ein MEHRDEUTIGER Typ !
14.02.2012 18:03:39
Dirk
Hallo NoNet,
Das Varian eine mehrdeutige Variable selbst darstellt ist klar. meine Frage ziehlt eher darauf hinnaus ob ich in einer Function
Function blablabla(text_oder_variant as String or Variant)
.
was ich nämlich da nicht verstanden hatte, da ich das ja als Variant definiert hatte, wieso die Function (die einen String erwartet) auf einen Fehler läuft. Variable zu string gemacht alles super.
Gruß Dirk
Anzeige
Parameter für UDF als variablen Typ deklarieren
14.02.2012 19:28:09
NoNet
Hallo Dirk,
wenn der Übergabe-Parameter an eine UDF variablen Typs sein soll, dann lasse die Typendeklaration weg (siehe Test4()) oder deklariere ihn in der UDF als ByVal var... (siehe Test3()) :
Sub VariablenTests()
'Tests für unterschiedliche Variablentypen (VARIANT, STRING)
'als Parameter für FUNCTION Test1 bis Test3
'14.02.2012, NoNet - www.excelei.de
Dim varX As Variant, strX As String
varX = "VAR-Text"
strX = "STRING-Text"
'MsgBox test1(varX) 'Fehler, da Test1 einen STRING erwartet
MsgBox Test1(CStr(varX)), , 1 'VARIANT-Variable in STRING umgewandelt
MsgBox Test2(varX), , 2 'funktioniert !
MsgBox Test3(varX), , 3 'funktioniert auch, da ByVal
MsgBox Test4(varX), , 4 'funktioniert da kein TYP angegeben wurde
MsgBox Test1(strX), , 1 'funktioniert !
MsgBox Test2(strX), , 2 'funktioniert !
MsgBox Test3(strX), , 3 'funktioniert !
MsgBox Test4(strX), , 4 'funktioniert !
End Sub
Function Test1(var As String)
Test1 = var
End Function
Function Test2(var As Variant)
Test2 = var
End Function
Function Test3(ByVal var As String)
Test3 = var
End Function
Function Test4(var)
Test4 = var
End Function
Gruß, NoNet
Anzeige
AW: Parameter für UDF als variablen Typ deklarieren
14.02.2012 19:39:22
Dirk
Dank dir erneut NoNet.
verstanden das war ja diese geschichte mit byval (variabelninhalt übergeben) und byref (Variablenadresse übergeben).
oha machmal sollte man sich doch nochmal das Grundwissen erneut durchlesen.
Gruß
Dirk
...eben, denn das ist auch nicht ganz richtig, ...
15.02.2012 00:41:42
Luc:-?
…Dirk,
es sei denn, du meinst mit „Adresse” etwas annähernd einem Pointer Vglbares, denn ByRef hat in einer SubProz Auswirkungen auf das standardmäßig so übergebene Objekt. Mit ByVal wird quasi eine Kopie des Objekts übergeben, an der du dich dann austoben kannst, ohne Konsequenzen für das Original befürchten zu müssen.
Übrigens sollte man Fktt Argumente, die normalerweise Zellbezüge repräsentieren sollen, As Variant übergeben, es sei denn, eine Eigenschaft soll ermittelt wdn, die nur ein Range-Objekt haben kann. Dadurch wird es mögl, anstelle des Zellbezugs auch einen Ausdruck zu verwenden, der ggf ein Datenfeld liefert. Das haben die jeweiligen Pgmmierer einiger neuerer XlFktt wie bspw RANG anscheinend nicht beachtet, weshalb man als Anwender nun Klimmzüge machen muss, um mit Ersatzkonstruktionen doch noch zum gewünschten Ergebnis zu gelangen.
Desweiteren ist auch ein Argument als ParamArray vom Typ Variant und fktt (interessanterweise) sowohl als übergebene Einzelwerte wie auch mit Datenfeldern. Dabei ist ein an dieser Stelle übergebenes DFeld in Gänze immer nur der 1. mögliche Parameter von ParamArray.
Gruß Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige