Registriert seit: 19.02.2016
Version(en): 2010
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?
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
14.03.2016, 14:16
(Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2016, 14:17 von RPP63.)
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
14.03.2016, 14:39
(Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2016, 14:39 von RPP63.)
Ach so: (weil es ein häufiger Fehler bei VBA ist) strText ist bei Dir ein Variant! :21: Dateiupload bitte im Forum! So geht es: Klick mich! src=" Dateiupload bitte im Forum! So geht es: Klick mich!" /> Richtig lautet die Deklarierung: Code: Dim strText As String, warray() As String, varray As Variant
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 19.02.2016
Version(en): 2010
Hallo Ralf,
also wenn ich dich jetzt richtig verstanden habe, dann kann bzw. hat ein String-Array Klammern und ein Variant Array keine.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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-2019+365)
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
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
|