Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Variablen mehrdeutig definieren | Herbers Excel-Forum


Betrifft: Variablen mehrdeutig definieren von: Dirk
Geschrieben am: 14.02.2012 17:46:16

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

  

Betrifft: VARIANT ist ja ein MEHRDEUTIGER Typ ! von: NoNet
Geschrieben am: 14.02.2012 17:52:09

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


  

Betrifft: AW: VARIANT ist ja ein MEHRDEUTIGER Typ ! von: Dirk
Geschrieben am: 14.02.2012 18:03:39

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


  

Betrifft: Parameter für UDF als variablen Typ deklarieren von: NoNet
Geschrieben am: 14.02.2012 19:28:09

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


  

Betrifft: AW: Parameter für UDF als variablen Typ deklarieren von: Dirk
Geschrieben am: 14.02.2012 19:39:22

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


  

Betrifft: ...eben, denn das ist auch nicht ganz richtig, ... von: Luc:-?
Geschrieben am: 15.02.2012 00:41:42

…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 :-?


Beiträge aus den Excel-Beispielen zum Thema "Variablen mehrdeutig definieren"