Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TomLudwig am 10.10.03 - 10:45:46
-
Hi,
ich habe volgendes Code-Beispiel gefunden, kann es mir jemand erklären?
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim flag As Variant
Dim sForm As String
Dim autoHorzFit As Variant
Dim autoVertFit As Variant
Dim noCancel As Variant
Dim noNewFields As Variant
Dim noFieldUpdate As Variant
Dim readOnly As Variant
Dim title As String
Dim doc As NotesDocument
Dim sizeToTable As Variant
Dim noOKCancel As Variant
Dim value As Variant
Dim docThis As NotesDocument
Dim i As Integer
Dim vResult As Variant
Dim sCol1() As String
Dim sCol2() As String
sForm = "(AuswahlKundenIntern)"
autoHorzFit = True
autoVertFit = True
noCancel = False
noNewFields = True
readOnly = False
title = "Auswahl der internen Kunden"
Set doc = Nothing
sizeToTable = True
noOKCancel = False
flag = ws.DialogBox( sForm , autoHorzFit , autoVertFit , noCancel , noNewFields , noFieldUpdate , readOnly , title , , sizeToTable , noOkCancel )
Bis hier ist alles in ordnung. Dann fangen meine Probleme an...
If flag = True Then
Set docThis = ws.CurrentDocument.Document
value = docThis.Liste_Intern
If value(0) <> "" Then
Redim sCol1( Lbound(value) To Ubound(value))
Redim sCol2( Lbound(value) To Ubound(value))
For i = Lbound(value) To Ubound(value)
vResult = Evaluate( |@Explode("| + value(i) + |" ; "#")| )
sCol1(i) = vResult(0)
sCol2(i) = vResult(1)
Next
docThis.Kunde_Intern_Nummer = sCol2
docThis.Kunde_Intern_Name = sCol1
End If
End If
End Sub
-
du musst dir in der Designer Hilfe eignetlich nur die Hilfe zu den entsprechenden Funktionen anschauen - gibt auch nen deutlich besseren Lerneffekt, als wenn jemand den Code in natürliche Sprache übersetzt
schau einfach mal was Ubound und LBound machen
was Redim dann mit den gelieferten Ergebnissen macht
und was die @Explode-Funktion macht
dürfte kein Problem sein, wenn du den oberen Teil sowieso schon verstehst.
-
Hab ich ja schon...
und genau mit diesen Funktionen hab ich des Problem. Der rest is dann wieder kein Problem mehr...
-
ach so.
Ubound bzw. Lbound liefern dir die obere bzw. untere Grenze eines Arrays
z.B.
a(0)=1
a(1)=2
a(2)=3
Ubound liefert 2, Lbound liefert 0
Redim ändert die Größe eines Arrays
Redim a(0 to 2) erzeugt ein Array mit 3 Feldern (0, 1, 2)
@Explode macht eine Liste aus einem String, Trennzeichen zwischen Listenelementen kannst du definieren
@Explode("1+2+3"; "+") liefert dir
"1"
"2"
"3"
-
Also....
If flag = True Then
Set docThis = ws.CurrentDocument.Document Das ist dann die Maske die ich im Dialog aufrufe
value = docThis.Liste_InternDas sind die Markierten Werte in einem Array ODER?
If value(0) <> "" Then
Redim sCol1( Lbound(value) To Ubound(value))Redim hab ich verstanden aber wie funktioniert Lbound und Ubound Zählt das die ArrayElemente in value? Dann müsste Lbound doch immer 0 zurückgeben
Redim sCol2( Lbound(value) To Ubound(value))
For i = Lbound(value) To Ubound(value)
vResult = Evaluate( |@Explode("| + value(i) + |" ; "#")| )Explode hab ich verstanden....
sCol1(i) = vResult(0)
sCol2(i) = vResult(1)
Next
docThis.Kunde_Intern_Nummer = sCol2
docThis.Kunde_Intern_Name = sCol1
End If
End If
-
Also....
If flag = True Then
Set docThis = ws.CurrentDocument.Document Das ist dann die Maske die ich im Dialog aufrufe
jein. es ist das Dokument, das du gerade in der Dialogbox geöffnet hast
value = docThis.Liste_InternDas sind die Markierten Werte in einem Array ODER?
das sind die Werte, die in dem Feld Liste_Intern stehen. Wahrscheinlich sind das dann auch die, die ausgewählt sind
If value(0) <> "" Then
Redim sCol1( Lbound(value) To Ubound(value))Redim hab ich verstanden aber wie funktioniert Lbound und Ubound Zählt das die ArrayElemente in value? Dann müsste Lbound doch immer 0 zurückgeben
Arrays können auch mit dem Index 1 beginnen. in deinem Fall gibts aber immer 0, das ist korrekt
Redim sCol2( Lbound(value) To Ubound(value))
For i = Lbound(value) To Ubound(value)
vResult = Evaluate( |@Explode("| + value(i) + |" ; "#")| )Explode hab ich verstanden....
sCol1(i) = vResult(0)
sCol2(i) = vResult(1)
Next
docThis.Kunde_Intern_Nummer = sCol2
docThis.Kunde_Intern_Name = sCol1
End If
End If
so langsam wirds doch
-
Vielen Dank, ich habs kapiert....