Autor Thema: ISElement ?? Liste funzt nicht.  (Gelesen 1341 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
ISElement ?? Liste funzt nicht.
« am: 31.10.02 - 11:12:27 »
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 :

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

Offline Till_21

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • I love Germany
Re:ISElement ?? Liste funzt nicht.
« Antwort #1 am: 31.10.02 - 11:31:46 »
Wie wärs, wenn du mit einem dynamischen array arbeitest ?
dann die abfrage "if isnull(arraygetindex(liste,element)) then"
habe die erfahrung gemacht, dass dies mit weniger problemen verbunden ist...

gruss
till

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:ISElement ?? Liste funzt nicht.
« Antwort #2 am: 31.10.02 - 11:45:01 »
Hi,

meines Erachtens kann das auch nicht gehen, denn du füllst die Liste mit dem "Index" i und frägst bei IsElement mit dem "Index" doc.e4fldIdentnummer(0). Die Bedingung kann nie erfüllt sein.

Ändere den Code mal wie folgt ab:

...
While Not (doc Is Nothing)

If Iselement(LISTE(doc.e4fldIdentnummer(0))) Then  <- !!!!!!

  ' NIX, diese Person hab ich schon
Else
 
  LISTE(doc.e4fldIdentnummer(0)) = doc.e4fldIdentnummer(0)
 
  Print #temp,doc.sf_nachname(0)
  End If
  Set doc = dc.GetNextDocument(doc)
Wend  

Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:ISElement ?? Liste funzt nicht.
« Antwort #3 am: 31.10.02 - 12:02:15 »

@Axel : Einwandfrei !

@Till_21: Für dynamische Arrays reicht mein Latein vielleicht noch nicht ganz und da es jetzt klappt möchte ich den Code auch nicht mehr anfassen. Aber ob sich mein Code behauptet, wird die Praxis zeigen.


Euch Beiden meinen herzlichen Dank.


Viele Grüße

Don Pasquale




 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz