VBScript: Array vergrößern
Hallo zusammen,
ich habe da ein kleines Problem.
Da ich zu beginn nicht weiß, wieviele eingaben der nutzer machen möchte, benötige ich ein array mit nicht definierter größe. damit sich das feld bei jedem durchlauf der schleife um eins vergrößert, habe ich die "ReDim"-Zeile eingefügt. Leider kommt beim durchlauf des scripts immer die Fehlermeldung:
"(11, 2) Laufzeitfehler in Microsoft VBScript: Index außerhalb des gültigen Bereichs"
Kann ich in einer Arraydefinition nicht mit Variablen (Name) arbeiten???
Vielleicht hat jemand eine Idee!
Vielen Dank und Gruß Sebastian
Option Explicit
Dim Abfrage, Konto(), Name, Pfad, Pfadfrage, Eingabe, Frage
Name = -1
Do
Name = Name + 1
Eingabe = InputBox("Bitte geben Sie den Namen des " & 1 & "ten Kontos ein.","Kontonamen eingeben", "Quicken")
WScript.Echo Name & Eingabe
ReDim Preserve Konto(Name,1)
Konto(Name,0) = Eingabe
Pfadfrage = MsgBox("Befindet sich das Konto im Pfad 'c:\Programme\Quicken' ?",vbYesNo + vbQuestion, "Frage")
Select Case Pfadfrage
Case vbYes
Konto(Name,1) = "C:\Programme\Quicken"
Case vbNo
Konto(Name,1) = InputBox("Bitte geben Sie den Pfad zum Konto '" & Konto(Name,0) & " an!", "Pfadangabe", "C:\Programme\Quicken")
End Select
Frage = MsgBox("Möchten Sie ein weiteres Konto Zippen?", vbYesNo + vbQuestion, "Frage")
Loop While Frage = vbYes
ich habe da ein kleines Problem.
Da ich zu beginn nicht weiß, wieviele eingaben der nutzer machen möchte, benötige ich ein array mit nicht definierter größe. damit sich das feld bei jedem durchlauf der schleife um eins vergrößert, habe ich die "ReDim"-Zeile eingefügt. Leider kommt beim durchlauf des scripts immer die Fehlermeldung:
"(11, 2) Laufzeitfehler in Microsoft VBScript: Index außerhalb des gültigen Bereichs"
Kann ich in einer Arraydefinition nicht mit Variablen (Name) arbeiten???
Vielleicht hat jemand eine Idee!
Vielen Dank und Gruß Sebastian
Option Explicit
Dim Abfrage, Konto(), Name, Pfad, Pfadfrage, Eingabe, Frage
Name = -1
Do
Name = Name + 1
Eingabe = InputBox("Bitte geben Sie den Namen des " & 1 & "ten Kontos ein.","Kontonamen eingeben", "Quicken")
WScript.Echo Name & Eingabe
ReDim Preserve Konto(Name,1)
Konto(Name,0) = Eingabe
Pfadfrage = MsgBox("Befindet sich das Konto im Pfad 'c:\Programme\Quicken' ?",vbYesNo + vbQuestion, "Frage")
Select Case Pfadfrage
Case vbYes
Konto(Name,1) = "C:\Programme\Quicken"
Case vbNo
Konto(Name,1) = InputBox("Bitte geben Sie den Pfad zum Konto '" & Konto(Name,0) & " an!", "Pfadangabe", "C:\Programme\Quicken")
End Select
Frage = MsgBox("Möchten Sie ein weiteres Konto Zippen?", vbYesNo + vbQuestion, "Frage")
Loop While Frage = vbYes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 46306
Url: https://administrator.de/forum/vbscript-array-vergroessern-46306.html
Ausgedruckt am: 18.04.2025 um 19:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo Stadtverwalter!
Um mich auf die eigentlichen Frage (und nicht auf die Überlegung, warum eine laufende Nummer bei Dir "Name" heißt) zu konzentrieren: ReDim ist nur für die letzte Dimension anwendbar, was für Deinen Ansatz bedeutet, die Indizes umgekehrt zu vergeben - etwa so:
HTH
bastla
[Edit] "Start-"Nummer angepasst - die Zählung mit einem "nullten" Konto zu beginnen würde wohl nur Mathematiker begeistern ... [/Edit]
Um mich auf die eigentlichen Frage (und nicht auf die Überlegung, warum eine laufende Nummer bei Dir "Name" heißt) zu konzentrieren: ReDim ist nur für die letzte Dimension anwendbar, was für Deinen Ansatz bedeutet, die Indizes umgekehrt zu vergeben - etwa so:
Option Explicit
Dim Abfrage, Konto(), Nummer, Pfad, Pfadfrage, Eingabe, Frage
Nummer = 0
Do
Nummer = Nummer + 1
Eingabe = InputBox("Bitte geben Sie den Namen des " & Nummer & "ten Kontos ein.","KontoNamen eingeben", "Quicken")
WScript.Echo Nummer & Eingabe
ReDim Preserve Konto(1,Nummer)
Konto(0,Nummer) = Eingabe
Pfadfrage = MsgBox("Befindet sich das Konto im Pfad 'c:\Programme\Quicken' ?",vbYesNo + vbQuestion, "Frage")
Select Case Pfadfrage
Case vbYes
Konto(1,Nummer) = "C:\Programme\Quicken"
Case vbNo
Konto(1,Nummer) = InputBox("Bitte geben Sie den Pfad zum Konto '" & Konto(0,Nummer) & " an!", "Pfadangabe", "C:\Programme\Quicken")
End Select
Frage = MsgBox("Möchten Sie ein weiteres Konto Zippen?", vbYesNo + vbQuestion, "Frage")
Loop While Frage = vbYes
HTH
bastla
[Edit] "Start-"Nummer angepasst - die Zählung mit einem "nullten" Konto zu beginnen würde wohl nur Mathematiker begeistern ... [/Edit]
Moin Stadtverwalter,
eventuell wird es ein wenig lesbarer, wenn Du mit CONST ein paar Pseudo-#defines reinstreust. Und Dir beim Testen die aktuelle Dimension Deines Kontos anzeigen lässt.
Wenn ich den Schnipsel am CMD-Prompt aufrufe mit "cscript...." ergibt sich:
Gruß Biber
P.S. Auch ich hab mich, ähnlich wie bastla, bemüht, Deinen Schnipsel halbwegs wiedererkennbar zu lassen.
Aber die numerische Variable "Name" hab ich auch in "Nr" umbenannt.
Und bei der Variablen "Eingabe" ist es mir schwergefallen, deren Namen so zu lassen.
Ich würde, auch wenn es nur VBScript ist, schon auch eine Variablenbenamsung mit Präfixen empfehlen ( str...für Strings, a...bei Arrays, n... bei numerischen oder ähnlich).
eventuell wird es ein wenig lesbarer, wenn Du mit CONST ein paar Pseudo-#defines reinstreust. Und Dir beim Testen die aktuelle Dimension Deines Kontos anzeigen lässt.
Option Explicit
CONST KTONAME = 1 ' Name des Kontos wird Array-Element 1
CONST KTOPATH = 2 ' Der Programmpfad steht in Element 2
CONST KTOPROPS= 2 ' Anzahl Konto-Properties ist also 2
Dim Abfrage, Konto(), Nr, Pfad, Pfadfrage, Eingabe, Frage
Redim Preserve Konto(KTOPROPS, 0)
Nr = 1
Do
Eingabe = InputBox("Bitte geben Sie den Namen des " & _
Nr & ".ten Kontos ein.","Kontonamen eingeben", "Quacken")
WScript.Echo Nr & " / " & Eingabe
ReDim Preserve Konto( KTOPROPS, nr)
Wscript.echo "Letzter Eintrag " & cStr(nr-1) & _
" Name / Pfad: " & Konto( KTONAME, Nr-1) &" / " & Konto( KTOPATH, Nr-1) & vbCRLF & _
" Dimensionsobergrenzen: " & CStr(UBound(Konto, KTONAME)) & "x" & CStr(UBound(Konto, KTOPATH))
Konto( KTONAME, nr) = Eingabe
Pfadfrage = MsgBox("Befindet sich das Konto im Pfad 'c:\Programme\Quicken' ?", vbYesNo + vbQuestion, "Frage")
Select Case Pfadfrage
Case vbYes
Konto( KTOPATH, nr) = "C:\Programme\Quicken"
Case vbNo
Konto( KTOPATH, nr) = InputBox("Bitte geben Sie den Pfad zum Konto '" & _
Konto( KTOPATH, Nr) & "an!", "Pfadangabe", "C:\Programme\Quicken")
End Select
Frage = MsgBox("Möchten Sie ein weiteres Konto Zippen?", vbYesNo + vbQuestion, "Frage")
Nr=Nr +1
Loop While Frage = vbYes
Wenn ich den Schnipsel am CMD-Prompt aufrufe mit "cscript...." ergibt sich:
>>cscript //nologo f:\VBS_Beispiele\RedimExam.vbs
1 / Quacken
Letzter Eintrag 0 Name / Pfad: /
Dimensionsobergrenzen: 2x1
2 / zwei
Letzter Eintrag 1 Name / Pfad: Quacken / C:\Programme\Quicken
Dimensionsobergrenzen: 2x2
3 / drei
Letzter Eintrag 2 Name / Pfad: zwei / C:\Programme\Quicken
Dimensionsobergrenzen: 2x3
4 / Quacken
Letzter Eintrag 3 Name / Pfad: drei / C:\Programme\Quicken
Dimensionsobergrenzen: 2x4
5 / Quacken
Letzter Eintrag 4 Name / Pfad: Quacken / C:\Programme\Quicken
Dimensionsobergrenzen: 2x5
Gruß Biber
P.S. Auch ich hab mich, ähnlich wie bastla, bemüht, Deinen Schnipsel halbwegs wiedererkennbar zu lassen.
Aber die numerische Variable "Name" hab ich auch in "Nr" umbenannt.
Und bei der Variablen "Eingabe" ist es mir schwergefallen, deren Namen so zu lassen.
Ich würde, auch wenn es nur VBScript ist, schon auch eine Variablenbenamsung mit Präfixen empfehlen ( str...für Strings, a...bei Arrays, n... bei numerischen oder ähnlich).

*agree*
Kann mich Biber nur anschließen, sowas erleichtert die spätere Verständnis eines Quelltextes ungemein ^^
Lonesome Walker
Btw: das funktioniert sogar
Kann mich Biber nur anschließen, sowas erleichtert die spätere Verständnis eines Quelltextes ungemein ^^
Lonesome Walker
Btw: das funktioniert sogar