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:
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
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:
For i = 0 to Ubound ( tmpRevisionen )
tmp2 = tmp2 + tmpRevisionen(i) + Chr(10)
Next
Greetz Jan
Vielen Dank für die vielen Lösungsmöglichkeiten :)
Ich habe mich mit allen Möglichkeiten ein wenig beschäftigt, denn nur so kann ich auch was lernen. ;)
Mit den "kurzen" Möglichkeiten ist nur ein anhängen möglich, ich muss allerdings meinen Text voranstellen.
Die 32k-Grenze sollte kein Problem sein, da es nur so 2-5 Einträge werden können.
Mein Script funktioniert jetzt auch!
Also nochmals vielen Dank für Eure Unterstützung
Gruß
Holger
hier mein 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))
tmp1 = Date$ & " " & Time$ & " " & "Bearbeitungsdokument hinzugefügt von: " & Chr(10) & " " & user & Chr(10)
tmp2 =tmp1
tmpRevisionen=parentdoc.Revisionen
For i=0 To Ubound( tmpRevisionen)
tmp2 = tmp2 & tmpRevisionen(i) & Chr(10)
Next
parentdoc.Revisionen = tmp2
Call parentdoc.save(True,True)
End Sub
So, Code nochmals angepasst.
Jetzt habe ich aber nochmal eine Frage.
Wie kann ich den User in der Form Abbreviated im String eintragen?
mit user = session.Username.Abbreviated klappt es jedenfalls nicht.
Gruß
Holger
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))
tmp1 = Date$ & " " & Time$ & " " & "Bearbeitungsdokument hinzugefügt von: " & Chr(10) & " " & user & Chr(10)
tmp2 =tmp1
tmp2 = Join(parentdoc.Revisionen, "~~")
tmp2 = tmp1 & "~~" & tmp2
tmpRevisionen = Split(tmp2, "~~")
Call parentdoc.ReplaceItemValue("Revisionen", tmpRevisionen)
Call parentdoc.save(True,True)
End Sub
...
Dim session As New NotesSession
Dim nam As NotesName
Set nam = session.CreateName(session.UserName)
user = nam.Abbreviated