Variable anlegen mit For Schleife

Das ist zu wenig Code um einen Fehler zu machen… aber es geht nicht !!

Warum ?

Dim Zähler As Integer
For Zähler = 1 To 10
Dim Zielpfad(Zähler) As String
Next Zähler

mfg jonny

Hallo jonny

Das ist zu wenig Code um einen Fehler zu machen…

Das ist - offensichtlich - ein Irrtum :smile:

aber es geht nicht !!
Warum ?
Dim Zähler As Integer
For Zähler = 1 To 10
Dim Zielpfad(Zähler) As String
Next Zähler

Ich versteh nicht, was Du machen möchtest, denn das, was Dein Code macht, lässt sich mit einer einzigen Zeile realisieren:

Dim Zielpfad(10) As String

Es werden ja keine Variablen „angelegt“, wie Du in Deinem Titel schreibst, sondern lediglich die Dimension eines Arrays neu festgelegt.
Trotz der für mich sinnlosen Schleife, hier eine funktionsfähige Umsetzung:

Dim Zähler As Integer
Dim Zielpfad() As String

For Zähler = 1 To 10
 ReDim Zielpfad(Zähler) As String
Next Zähler

Gruss
Peter

Ahh, Besten Dank.

Kurz nochmal für mich zum Verständnis

Dim Zielpfad(10) As String

Erstellt eine String VAriable für 10 Zeichen ? oder ?

Bei Folgendem Code werden „10 Variablen“ angelegt, da bin ich mir sicher und genau das habe ich auch gesucht. Bzw ich habe 10 plätze in dem Array ?

Zielpfad(1) bis Zielpfad(10)

Dim Zähler As Integer
Dim Zielpfad() As String

For Zähler = 1 To 10
ReDim Zielpfad(Zähler) As String
Next Zähler

Hi Joe,

Dim Zielpfad(10) As String

Erstellt eine String VAriable für 10 Zeichen ? oder ?

oder. Der Befehl erstellt ein Array aus 11 (Null bis Zehn) beliebig lange Stringvariablen. Ich glaube, Alex und ich haben Dir bisher zu viel fertigen Code geliefert.

Bei Folgendem Code werden „10 Variablen“ angelegt, da bin ich
mir sicher und genau das habe ich auch gesucht. Bzw ich habe
10 plätze in dem Array ?

Ja, hast Du, aber es wird jedes mal das Array neu angelegt, die Variable Zeilpfad(0) und Zielpfad(1) werden 10 mal angelegt und 9 mal vorher wieder gelöscht.

Zielpfad(1) bis Zielpfad(10)

Dim Zähler As Integer
Dim Zielpfad() As String

For Zähler = 1 To 10
ReDim Zielpfad(Zähler) As String
Next Zähler

Gruß Rainer

Hi Jonny,

Das ist zu wenig Code um einen Fehler zu machen…
aber es geht nicht !!

sehr schön, ich drucke mir das „es geht nicht“ auf Tesafilm aus, klebe es auf meine Glaskugel, dann schaue ich in die Kugel und sehe da deine VB-Version, in welcher Zeile ggfs. ein Fehler durch den Debugger kommt und was der Debugger so mitteilt.

Oder ich sehe daß der Debugger keine Information liefert was ja auch eine Information für mich ist.

Warum ?

K.A. In meinem Excel2000-Vba, was ja auf VB6 beruht ist es m.W. so, daß bei Start einer Prozedur alle Dim-Befehle, egal wo sie stehen in einem langen Code, ausgewertet werden um Platz für die Variablen zu schaffen.

Und zwar so, daß man die letzte Dimension eines Feldes immer noch mittels „ReDim“ abändern kann, die vorigen Dimensionen nicht.

Um die Geamtstruktur eines dreidimensionalen Feldes z.b: (10,10,10) komplett abzuändern reicht Redim nicht aus, man braucht dann copymemory um daraus das Feld (200,5) zu machen.

Dim Zähler As Integer
For Zähler = 1 To 10
Dim Zielpfad(Zähler) As String
Next Zähler

Wahrscheinlich liegt es daran daß der Debugger „Zähler“ markiert und sagt, „konstanter Ausdruck“ erforderlich.

Gruß
Reinhard

Moin, Joe,

Dim Zielpfad(10) As String

Erstellt eine String VAriable für 10 Zeichen ? oder ?

teilt dem VBA lediglich mit, dass ein Array namens Zielpfad 11 Strings aufnehmen können wird. Schreibst Du im Code Zielpfad(11), erntest Du einen Laufzeitfehler 9.

Bei Folgendem Code werden „10 Variablen“ angelegt…

Sie sind durch

 Dim Zielpfad(10) As String

bereits angelegt. Genauer: VBA kennt jetzt die 11 Variablen Zielpfad(0) … Zielpfad(10), alle mit der Länge 0.

Gruß Ralf

Moin,
Zuviel fertigen Code gibt es nicht !!:stuck_out_tongue:

Wenn ich 20 Variablen eines Typs gebraucht habe, habe ich das so gemacht: ( NICHT LACHEN !!! )

Public CheckV0 As Integer, CheckV1 As Integer, CheckV2 As Integer, CheckV3 As Integer, CheckV4 As Integer, CheckV5 As Integer, CheckV6 As Integer, CheckV7 As Integer, CheckV8 As Integer, CheckV9 As Integer, CheckV10 As Integer, CheckV11 As Integer, CheckV12 As Integer, CheckV13 As Integer, CheckV14 As Integer, CheckV15 As Integer, CheckV16 As Integer, CheckV17 As Integer, CheckV18 As Integer, CheckV19 As Integer

Aber ab heute werde ich danke Euch einfach
Dim CheckV(10) As String

So kann ich die Dinger auch einfach dem dazu gehörigen COntrol Array zuweisen.

Ich sollte mir einen 2ten Account für das Forum anlegen, falls ich nochmal ein paar elementare fragen haben sollte :stuck_out_tongue:

DANKE,
mfg joe

Hi Joe,

Zuviel fertigen Code gibt es nicht !!:stuck_out_tongue:

doch. Wenn das Projekt läuft und Du nicht verstehst warum.
Schon vor über einem Jahr habe ich in der ersten version für Dein Sync-Tool Arrays verwendet, versucht, Dir zu erklären wie und warum.

Weil Du aber fertigen Code bekommen hast, hast Du nur das ergebnis betrachtet und die nicht für den Code interessiert.

Wenn ich 20 Variablen eines Typs gebraucht habe, habe ich das
so gemacht: ( NICHT LACHEN !!! )

Public CheckV0 As Integer, CheckV1 As Integer, CheckV2 As
Integer, CheckV3 As Integer, CheckV4 As Integer, CheckV5 As
Integer, CheckV6 As Integer, CheckV7 As Integer, CheckV8 As
Integer, CheckV9 As Integer, CheckV10 As Integer, CheckV11 As
Integer, CheckV12 As Integer, CheckV13 As Integer, CheckV14 As
Integer, CheckV15 As Integer, CheckV16 As Integer, CheckV17 As
Integer, CheckV18 As Integer, CheckV19 As Integer

Aber ab heute werde ich danke Euch einfach
Dim CheckV(10) As String

Das hätte 19 heißen sollen? OK.

So kann ich die Dinger auch einfach dem dazu gehörigen COntrol
Array zuweisen.

ahhh, Steuerelementefeld hast Du verstanden. OK, schön.

Ich sollte mir einen 2ten Account für das Forum anlegen, falls
ich nochmal ein paar elementare fragen haben sollte :stuck_out_tongue:

*gg* nein. Du siehst doch, daß Du auch so Antworten bekommst.

Gruß Rainer

Irgendwie haut mein I Explorer 6 immer ne Menge Leerzeilen in manche Artikel dich ich hier lese.

Da ich im moment oder eigentlich schon immer 3 Projekte am laufen haben, für den fall das ich bei einem nicht weiter komme oder einfach keine Lust mehr drauf habe konnte ich heute den Code überall um mindestens 1/3 Optimieren. Es hat einfach klick gemacht

Danke, nochmal. Solltest du/Ihr mal in die Versuchung kommen mit VB6 ein attribut aus einem XML file lesen zu wollen :stuck_out_tongue: schau mal in mein XML Thema :smile:

Danke Euch !!

mfg Jonny

Hi Joe,

Solltest du/Ihr mal in die Versuchung kommen
mit VB6 ein attribut aus einem XML file lesen zu wollen :stuck_out_tongue:
schau mal in mein XML Thema :smile:

über XML weiß ich nichts, ich habe auch nicht im Ansatz verstanden, was Du da möchtest. Kann man das unabhängig von XML betrachten? Geht es Dir einfach nur um die Stringmanipulation? Das wäre dann doch zu einfach, oder?

Gruß Rainer

Moin,

Geht es Dir einfach nur um die
Stringmanipulation? Das wäre dann doch zu einfach, oder?

Auf keinen Fall :stuck_out_tongue: Ich werde dort nochmal ein paar Zeilen dazu schreiben. Ich kann Sachen einfach schlecht erklären.

mfg jonny

Gruß Rainer

Hallo Ralf,

ich mag dir nicht zu Nahe treten wollen. Aber wo hast du deine Glaskugel her um eine solche Aussage treffen zu koennen? Die haette ich dann auch gerne :smile:

Ohne nun weiter gross einzugehen. Aber habt ihr schon einmal etwas von Option Base 1 gehört? Je nachdem verhalten sich dann Array unterschiedlich!

MfG Alex

Moim Alex,

ich mag dir nicht zu Nahe treten wollen. Aber wo hast du deine
Glaskugel her um eine solche Aussage treffen zu koennen? Die
haette ich dann auch gerne :smile:

reich mal Deine rüber, damit ich sehe, welche Aussage Dir so wenig schmeckt.

Gruß Ralf

Moin Ralf,

probiere einfach folgendes aus.

Einmal dies

Option Base1
Dim s(10) as string

private sub DeineSubDieDuaufrufst
msgbox lbound(s) & " : " & ubound(s)
s(0)="Test"
msgbox err.Number
End Sub

Und dann dies

Dim s(10) as string

private sub DeineSubDieDuaufrufst
On error resume next
msgbox lbound(s) & " : " & ubound(s)
s(0)="Test"
msgbox err.Number
End Sub

MfG Alex

[MOD] - Abgeschlossen …
Hallo,

das sieht nicht mehr danach aus, als würde hier noch eine Antwort für den UP entstehen. Damit ist der Zweig OT und abgeschlossen.

Gruß Rainer