Domino 9 und frühere Versionen > ND8: Entwicklung
Fehlermeldung: Subscript out of range in loop-Schleife
regedit:
Habe folgendes Problem:
Habe das Text-Feld "Revisionen" mit Mehrfachwerte(mehrere Zeilen) im Hauptdokument. Nun muss ich aus einem Antwort-Dokument auf dieses Feld Revisionen zugreifen und Ergänzungen hinzufügen. Dies wollte ich im querysave des Antwortdoks machen. Da im Feld Revisionen unterschiedliche Anzahl von Werten sein können wollte ich dies mit einer loop-Schleife auslesen, erhalte allerdings am Ende des mehrmaligen Schleifendurchlaufs die Fehlermeldung Subscrip out of range.
Kann mir jemand weiterhelfen?
Gruß
Holger
hier der code:
--- Code: ---Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As notesdatabase
Dim responsedoc As notesdocument
Dim parentdoc As notesdocument
Dim tmpRevisionen As Variant
Dim user As String
Dim tmp1 As String
Dim tmp2 As String
Dim i As Integer
user = session.UserName
Set db=session.currentdatabase
Set responsedoc = source.document
Call responsedoc.save(True,True)
Set parentdoc=db.getdocumentbyUNID(responsedoc.UNID(0))
tmpRevisionen=parentdoc.Revisionen
tmp1 = Date$ + " " + Time$ + " " + "Bearbeitungsdokument hinzugefügt von: " + Chr(10) + " " + user + Chr(10)
tmp2 =tmp1
i = 0
Do Until tmpRevisionen(i) = False
tmp2 = tmp2 + tmpRevisionen(i) + Chr(10)
i= i +1
Loop
parentdoc.Revisionen = tmp2
Call parentdoc.save(True,True)
End Sub
--- Ende Code ---
Driri:
Du willst doch einfach nur einen Wert hinzufügen, oder sehe ich das falsch ?
In dem Fall würde ich den Inhalt des Items "Revisionen" mit Join in einen String pumpen, den neuen Wert dazu verketten und dann den String mit Split wieder in einen Array umwandeln und in das Item zurückschreiben.
Darüber hinaus empfehle ich, für die Verkettung von Strings in Script nicht das "+", sondern das "&" zu verwenden.
Mal schnell runtergeschrieben könnte das dann so aussehen (ohne Gewähr):
--- Zitat ---...
tmp2 = Join(parentdoc.Revisionen, "~~")
tmp2 = tmp2 & "~~" & tmp1
tmpRevisionen = Split(tmp2, "~~")
Call parentdoc.ReplaceItemValue("Revisionen", tmpRevisionen)
Call parentdoc.Save(True, True)
...
--- Ende Zitat ---
DAU-in:
enthält das Item Revisionen denn boolesche Werte? Oder warum prüst du auf false? Und wenn ja, soll er dann abbrechen?
ich würde eine Forall-Scleife nehmen
forall x in revisionen
tmp2 = tmp2 + x + Chr(10)
end forall
Die hört auf, wenn nix mehr da ist .....
Grüsse
Dau-in
edith: oder appendToTextlist verwenden
Jan Grünklee:
Hallo Holger,
also bei dir wird in tmpRevisionen ein Variant mit mehreren Texteinträgen aus dem entsprechenden Feld gefüllt. Die einzelenen Einträge durchläufst Du. Allerdings wird keiner dieser Werte in deinem Variant je False werden, da es immer Text ist. Quasi würde deine Schleife eine Endlosschleife sein. Der Fehler tritt auf, weil Du irgendwann das Ende der Einträge in Deinem Variant erreicht hast, aber durch das weitere hochzählen auf einen Indexwert zugreifst, den es garnicht gibt.
Machs doch eher so:
--- Code: ---For i = 0 to Ubound ( tmpRevisionen )
tmp2 = tmp2 + tmpRevisionen(i) + Chr(10)
Next
--- Ende Code ---
Greetz Jan
thomson666:
zum anhängen 1nes Wertes an ein Array würde ich
Redim preserve tmpRevisionen(Ubound(tmpRevisionen)+1)
tmpRevisionen(Ubound(tmpRevisionen)) = neuerWert
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln