So habe nun folgende Lösung , vllt habt ihr lust sie noch zu verbessern, weil ich bestimmt Aspekte vergessen habe, aber das wichtigste es funktioniert
Function appendLogEntry( varListHistory As Variant, strLogText As String,doc As NotesDocument)As Variant
' varListHistory = Der Feldinhalt aus dem aktuellen Dokument
' strLogText = der Text der angehangen werden soll
' doc = das Dokument ( wird nur für das Evaluate benutzt )
Dim strTemp As String
strTemp = Implode(varListHistory,"~")
strTemp = strLogText + "~" + strTemp
varListHistory = Split(strTemp,"~")
Call doc.ReplaceItemValue("listHistory",varListHistory)
If Ubound(varListHistory) > 24Then
varListHistory = Evaluate({@Subset(listHistory;25)},doc)
End If
appendLogEntry = varListHistory
End Function
Sorry, wenn ich diesen alten Fred nochmal bemühe, aber ich wollte ein ähnliches Problem lösen und bekomme leider einen Fehler.
Meine Aufgabe ist es, die letzten 5 Einträge eines Arrays in ein Feld zu schreiben.
dim vValue as variant, x as integer, y as integer
vValue = doc.Liste
y = Ubound(vValue)
x = y - 4
Redim Preserve vValue( x to y )
doc.Liste = vValue
Beim Aufruf der Funktion kommt ein "Out of range". Lt. Debugger ist y = 10 und x = 6
Die andere Variante mit
vListe = doc.Liste
vValue= Evaluate({@Subset(vListe;-5)},doc)
doc.Liste = vValue
bringt nur einen leeren String und nicht den Feldinhalt, den ich eigentlich möchte (eben die letzten 5 Werte der Liste).
Kann mir jemand sagen, wo mein Fehler ist?
Bille
PS: Ich kann das Ganze erst wieder im Büro testen und dann abends antworten, ich bitte daher um Geduld, falls ich nicht gleich zurückschreiben kann.
@Peter,
die Lösung mit dem Redim Preserve funktioniert nur, wenn du die Base hälst - also in dem genannten Beispiel von 0 neu dimensionierst:
Sub Initialize()
On error GoTo ErrHandle
Dim v() As String
Dim i As Integer
Redim v( 0 to 9 )
For i = 0 to UBound( v )
v(i) = Cstr( i + 1 )
' Print i
Next
Redim Preserve v( 0 to 4 ) ' gibt in diesem Fall die Elemente 0 - 4 zurück
' Redim Preserve v( 1 to 4 ) ' gibt in diesem Fall einen Fehler zurück => Array bound out of index
MsgBox Implode( v )
Exit Sub
ErrHandle:
MsgBox Error & " in Zeile " & Erl
Resume WayOut
WayOut:
End Sub
Toni :)
Mit
doc.Liste = Evaluate({@Subset(Liste;-5)},doc)
hat's wunderbar geklappt.
Danke an Euch alle
Bille
:)