Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Deklarationsproblem bei der Split Funktion
#1
Hallöchen,

habe folgenden Code:
Code:
Sub Splitten()
Dim strText, warray() As String, varray() As Variant
strText = "Dies. ist. ein. einfacher. Beispielsatz"
warray() = Split(strText, ". ")
varray() = Split(strText, ". ")


End Sub

Wieso ist bei der Deklaration warray() as String möglich, varray() as Variant aber falsch?
to top
#2
Moin!
Ein Variant-Array hat keine Klammern.
Teste mal:
Sub Splitten()
Dim strText, warray() As String, varray As Variant
strText = "Dies. ist. ein. einfacher. Beispielsatz"
warray() = Split(strText, ". ")
varray = Split(strText, ". ")
End Sub

Gruß Ralf
to top
#3
Ach so:
(weil es ein häufiger Fehler bei VBA ist)
strText ist bei Dir ein Variant!  21



Richtig lautet die Deklarierung:
Code:
Dim strText As String, warray() As String, varray As Variant

Gruß Ralf
to top
#4
Hallo Ralf,

also wenn ich dich jetzt richtig verstanden habe, dann kann bzw. hat ein String-Array Klammern und ein Variant Array keine.
to top
#5
Hi!
Du siehst doch meinen obigen funktionierenden Code?
Frage mich bitte aber nicht, warum das so ist.
(mögliche Erklärung: ein Variant kann Alles aufnehmen, einem String muss man erst beibringen, ob er ein Array oder lediglich einen einzigen Text aufnehmen soll)

Zugegeben skurriles Beispiel:
Ich hinterfrage auch nicht die neue deutsche Rechtschreibung, ich nutze sie nur meist.

Gruß Ralf
to top
#6
Hallöchen,

eventuell nicht ganz.

Dim arrText() as String
benötigt die Klammern, damit Excel bei der Dimensionierung unterscheiden kann, ob es ein String oder ein entsprechendes Array ist.
Einem Variant-Array kannst Du auch Klammern mitgeben, z.B., wenn du es Dabei dimensionierst.
Dim arrVar(1)

In ein String-Array bekommst Du übrigens auch Zahlen rein, die dort dann ein String sind.
In ein Zahlenarray, z.B.
Dim arrInt() as Integer
verträgt hingegen keine anderen Zeichen als Zahlen. Kommastellen werden bei Integer übrigens abgeschnitten.

Code:
Sub test1()
Dim arrStr() As String
Dim arrInt(0) As Integer
Dim arrVar
Dim strText$
strText = "Dies. ist. ein. einfacher. Beispielsatz"
arrStr = Split(strText, ". ")
arrVar = Split(strText, ". ")
arrStr = Split("1,2,3,", "")
arrVar = Array(1, 2, 3) 'Array(...) geht mit arrstr() nicht
arrStr(0) = 1.25
arrInt(0) = 1.25 'arrInt(0) = "A" geht mit arrInt nicht
End Sub
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
to top
#7
Hallo, Leute;
wenn eine Variable ohne Klammern notiert wird, ist sie skalar, d.h., kann nur einen Wert enthalten. Eine ohne Datentypangabe deklarierte Variable ist ebenso vom Typ Variant wie eine explizit so deklarierte. Ein solcher Variant  hat nun die Eigenschaft, alles enthalten zu können, also auch Objekte und natürlich auch diverse Arrays  unterschiedlicher Datentypen. Das begründet dann einen anderen Array-Typ, kein klassisches n-dimensionales VBA-Array, der eher den Array-Objekten anderer Programmiersprachen ähnelt. Dieser kann dann auch klassische n-dimensionale Arrays  neben weiteren, stets 1dimensionalen Variants  mit einem Array  enthalten. Solche Variants  bilden dann keine n Dimensionen, sondern Hierarchien, weshalb man dann eher von Stufigkeit als von Dimensionalität sprechen könnte.
Klassische Arrays  verlangen eine Dimensionsangabe, zumindest eine leere (werden dann später ReDim ensionalisiert). Das gilt natürlich auch für solche vom Typ String. Die vbFunktion Split  hat nun die Fähigkeit, aus einer String-Variablen ein Array  zu machen, das dann selbstverständlich vom gleichen Typ sein muss. Daran ändert auch die Zuweisung an einen Variant  nichts, außer dass dieser dann einen Untertyp String-Array  hat, der von diversen vbFunktionen allein angezeigt wird. Damit dürfte ein String-Array  auch das einzige sein, dem man ein Array, wenn auch nur ein 1dimensionales, genauer einen horizontal gerichteten (Zeilen-)Vektor, auf diese einfache Art zuweisen kann.
Deshalb werden aus einem String  auch keine echten Zahlen, nur weil man das mit Split  erzeugte Array  einem Variant  zuweist! Auch eine entsprechende Nachbehandlung seiner Elemente nutzt dann nichts! Wollte man das machen, müssten sie einem anderen Variant-Array  zugewiesen werden, falls es sich im Ergebnis um eine Mischung von Text und Zahlen in einem Vektor handeln sollte. Anderenfalls (nur Zahlen) könnte dafür auch ein anderer, dementsprechender Datentyp genutzt werden.
Gruß, Castor
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste