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 |