Hallo LoNos
ich habe ein kleines Problem mit meiner Serienbrieffunktion.
Aus einer View kann der User alle Datensätze auswählen,
denen ein Serienbrief geschickt werden soll.
Aber da in der View derselbe Adressat öfter auftauchen kann,
kann es auch dem User passieren, dass er einen Adressaten Zweimal anwählt.
Jedes e4fldIdentnummer soll aber nur einmal auftauchen.
Deswegen überprüfe ich jeden Satz aus der Collection, ob er in meiner Liste bereits existiert. Obwohl die liste brav gefüllt ist, sind nie 2 Elemente gleich. Das IsElement muss wohl flasch sein.
Aber was, warum, wieso und wieso nicht ?
' Liste
Dim LISTE List As String
Dim i As Integer
While Not (doc Is Nothing)
If Iselement(LISTE(doc.e4fldIdentnummer(0))) Then <- !!!!!!
' NIX, diese Person hab ich schon
Else
I = I + 1
LISTE(I) = doc.e4fldIdentnummer(0)
Print #temp,doc.sf_nachname(0)
End If
Set doc = dc.GetNextDocument(doc)
Wend
Etwas Ratlos und auf guten Rat hoffend
Ciao
Don Pasquale
Hier ist der ganze Code :
' Quelle der Serienbriefvorlage
Dim doc As NotesDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim user As String
Dim Reaktionsbriefpfad As String
Set db = session.CurrentDatabase
user = session.UserName
Set doc = db.GetProfileDocument( "e4frmProfil" , user )
Reaktionsbriefpfad = doc.Serien_1_Pfad(0)
' *****************************************
' Pfad für die Steuerdatei
Dim DataSourcePfad As String
DataSourcePfad = "c:\Serie\serien.txt"
Dim temp As String
'*******************************************
Dim word As Variant
Dim WordDoc As Variant
'*******************************************
' Liste
Dim LISTE List As String
Dim i As Integer
'*******************************************
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
i = collection.count
' Aus allen markierten Dokumenten werden Identnummer und Name genommen
' und in C:\Serie\Serien.txt geschrieben
Set session = New notessession
Set db=session.currentdatabase
Set dc=db.UnprocessedDocuments
Set doc=dc.GetFirstDocument
' Erzeugen der DatenQuelle
temp=Freefile()
Open DataSourcepfad For Output As temp
' Dies sind die Namen der Felder in der Serienbriefvorlage
Print #temp,"Vorname,Name,Strasse,PLZ,Ort"
While Not (doc Is Nothing)
' Vielleicht ist in der Auswahl eine Person öfter vertreten. Im Formular muss ein ID-Feld vorhanden sein.
' Das ID Feld heisst bei mir e4fldIdentnummer
If Iselement(LISTE(doc.e4fldIdentnummer(0))) Then
' NIX, diese Person hab ich schon
Else
I = I + 1
LISTE(I) = doc.e4fldIdentnummer(0)
Print #temp,doc.sf_vorname(0)+","+doc.sf_nachname(0)+","+doc.sf_strasse(0)+","doc.sf_postleitzahl(0)+","+doc.sf_ort(0)
End If
Set doc = dc.GetNextDocument(doc)
Wend
Close temp
'***************'*******************
Set word = CreateObject("Word.Application") 'Create Word object
Call word.documents.add(Reaktionsbriefpfad)
Set Worddoc2 = word.activedocument 'Get a handle for the active document
WordDoc2.MailMerge.MainDocumentType = wdFormLetters
Call WordDoc2.MailMerge.OpenDataSource(DataSourcePfad)
WordDoc2.MailMerge.SuppressBlankLines = True
Call WordDoc2.MailMerge.Execute(True)
word.visible = True 'Comment this line if you don't want to show Word.
End Sub