Domino 9 und frühere Versionen > ND9: Administration & Userprobleme

E-Mailversand aus Excel geht mit LN 9 nicht mehr

(1/17) > >>

Benni1988:
Hallo zusammen,

bitte nicht wundern, ich habe das Problem im Forum "Herbers-Excel Forum" auch gepostet, dort wurde mir allerdings euer Forum dazu empfohlen..

Ich habe vor einen halben Jahr ein Makro geschrieben (mit Hilfe aus verschiedenen Foren), mit dem ich aus Excel heraus diverse E-Mails in Lotus Notes 8.5 versenden konnte. Dies hat auch einwandfrei funktioniert.

Nun haben wir aber auf Lotus Notes 9 umgestellt und ich bekomme immer die Fehlermeldung
"Systemfehler &H800 10 105 (-2147417851). Ausnahmefehler des Servers"

An was könnte das liegen? Vielen Dank für eure Hilfe.

Anbei mein Code:


Sub CommandButton1_Click()
       If MsgBox("Sollen die E-Mail(s) gesendet werden?", vbQuestion + vbYesNo, _
         "Löschen bestätigen") = vbYes Then
     
       Dim sText As Variant, sEmpfang As Variant, sBetrifft As String
       Dim session As Variant, db As Variant, doc As Variant, rtobject, ws As Variant
       Dim x As Integer, y As Integer, Msg As Integer
       Dim sKopie As String, AttachMe As Variant, DerAnhang As Variant
       Dim user As String, server As String, mailfile As String, sBlindKopie As String
       Dim vAn As Variant, vCopy As Variant, vBlind As Variant, sAnhang As String
       Dim sAnrede As Variant
       Dim sVorname As Variant
       Dim sNachname As Variant
       Dim tempAnrede As Variant
         
       ' Verbindung zum Mailserver aufbauen
       Set session = CreateObject("notes.notessession")                      ' Notes muss gestartet  _
     sein
       user = session.UserName
       server = session.GetEnvironmentString("MailServer", True)
       mailfile = session.GetEnvironmentString("MailFile", True)
       Set db = session.GetDatabase(server, mailfile)                        ' Emails zusammenbauen  _
     und rausschicken
       For i = 12 To cells(Rows.Count, 9).End(xlUp).Row
         If cells(i, 10) <> "ja" Then                                        'keine E-Mail, wenn "ja" _
      in Spalte "geantwortet"
           vAn = cells(i, 9)
           sAnrede = Range("e" & i)                                          'Anrede aus Spalte e
           Select Case (sAnrede)
             Case "Herr":                                                    'Im Fall, dass Anrede " _
     Herr" in Spalte e, dann schreibe "Sehr geehrter Herr"
               tempAnrede = "Sehr geehrter Herr"
             Case "Frau":
               tempAnrede = "Sehr geehrte Frau"                              'Im Fall, dass Anrede " _
     Frau" in Spalte e, dann schreibe "Sehr geehrte Frau"
             Case "Sehr geehrte Damen und Herren":
               tempAnrede = "Sehr geehrte Damen und Herren"
             Case "Dear":
               tempAnrede = "Dear"                                           'Im Fall, dass Anrede " _
     Dear" in Spalte e, dann schreibe "Dear"
           End Select
         sVorname = Range("f" & i)                                         'Vorname aus Spalte f
         sNachname = Range("g" & i)                                        'Nachname aus Spalte g
           If Sheets("Tabelle1").Range("h" & i).Value = "Deutsch" Then       'wenn in Spalte "h" " _
     Deutsch" als Sprache steht, dann
             sText = tempAnrede & " " & sNachname & "," & Chr(10) & Chr(10) & Range("B4") & Chr(10)   _
         'dann nehme die Anrede + Nachnamen + den Text aus Zelle "B4"
           Else
             sText = tempAnrede & " " & sVorname & "," & Chr(10) & Chr(10) & Range("D4") & Chr(10)    _
         'sonst nehme Anrede + Vorname + Text aus Zelle "D4"
           End If
         sBetrifft = Range("B3")                                           ' Überschrift in Zelle b3
         sKopie = Range("D3")                                              ' Kopie der E-MAil an e- _
     Mail Adresse aus Zelle "D3"
         sBlindKopie = Mid(vAn, 3)                                         ' schickt an alle Empfä _
     nger eine Blindkopie
         sAnhang = Range("B6")                                             ' Link aus Zelle b6
         sAnhang2 = Range("B7")                                            ' Link aus Zelle b7
         sAnhang3 = Range("B8")                                            ' Link aus Zelle b8
         If Len(sKopie) > 0 Then vCopy = Split(sKopie, " ; ")              ' cc Array
         If Len(sBlindKopie) > 0 Then vBlind = Split(sBlindKopie, " ; ")   'bcc Array
           Set doc = db.createdocument()
           doc.Form = "Memo"
           doc.sendto = vAn
           If Len(sKopie) > 0 Then doc.CopyTo = vCopy                        'cc Array
            doc.Subject = sBetrifft                                          ' die Betreffzeile
           doc.SAVEMESSAGEONSEND = True
           doc.PostedDate = Now
         'Die Zeilen mit dem Anhang nach hier oben verschieben, ist wichtig die Reihenfolge
         ' *******************************************
           If sAnhang <> "" Then
             Set AttachMe = doc.CREATERICHTEXTITEM("Attachment")
             Set DerAnhang = AttachMe.EMBEDOBJECT(1454, "", sAnhang)
             Set DerAnhang2 = AttachMe.EMBEDOBJECT(1454, "", sAnhang2)
             Set DerAnhang3 = AttachMe.EMBEDOBJECT(1454, "", sAnhang3)
             ',"Attachment" wird nicht benötigt
           End If
         '*******************************
           Set ws = CreateObject("Notes.NotesUIWorkspace")
           ' **durch das öffnen des Dokumentes durch NotesUIWorkspace**
           ' **erreicht man das die eingestellte Signatur aus den **
           ' **Lotus Notes Optionen eingefügt wird
           Call ws.EDITDOCUMENT(True, doc)
           Set doc = ws.CURRENTDOCUMENT
           Call doc.GOTOFIELD("Body")
           Call doc.insertText(sText)
           Call doc.Send(True)
           Call doc.Close               'Schliesst das gesendete Formular
           Call doc.Save(True, True)
           Set AttachMe = Nothing
           Set DerAnhang = Nothing
           Set ws = Nothing
           Set doc = Nothing
         
         End If
       Next i
        ' Verbindung zum Mailserver löschen
     Aufraeumen:
         On Error Resume Next
         Set db = Nothing
         Set session = Nothing
         Exit Sub
     Fehler:
         Resume Aufraeumen
     End If
     End Sub
     
     

Ich bin noch ein ziemlicher Anfänger, wenn es um Makros geht.
Ich hoffe, aus dem Post wird mein Problem ersichtlich

vielen Dank für eure Hilfe

Viele Grüße
Benni

WildVirus:
Hallo Benni,

herzlich willkommen im Forum.

Was mit direkt auffällt, Du hast keine Fehlerroutinen eingebaut

Auf die Standardfrage - "An welcher Stelle bleibt das Makro hängen?"- wirst Du daher vermutlich keine Antwort haben.

Daher bitte zurück nach Excel, bau Dir eine Fehlerroutine ein, die Dir sagt, wo der Fehler auftritt.

Was mir negativ auffällt, ist, dass Du mehrere Variablen in einer Zeile deklarierst, teilweise mit Typ, teilweise ohne. Eigentlich unsauber und kann auch zu unterschiedlichen Ergebnissen führen, insbesondere wenn kein 'Option Explicit Statement' verwendet wird, das korrekte Typisierung verlangt.

Wenn Du die Stelle kennst, die Probleme macht, kannst Du in die richtige Fehlersuche einsteigen.

Mit gezielten Fragen gibt es auch eine gesteigerte Chance auf Antworten.

Viel Erfolg,
Axel

Tode:
Dafür, dass Du Anfänger bist, sieht der Code (von den Dingen, die Alex angemerkt hat abgesehen) echt anständig aus. Dein Problem: Du kennst nicht den Unterschied zwischen einem NotesDocument und einem NotesUIDocument.

Beide sehen sehr ähnlich aus, haben aber unterschiedliche Methoden.

Die Zeile
--- Code: ---Set doc = db.createdocument()
--- Ende Code ---
erstellt ein Objekt der Klasse "NotesDocument". Das ist ein Backend- Objekt und spiegelt das Dokument wieder, wie es nachher auf der Platte landet.
Die Zeile
--- Code: ---Set doc = ws.CURRENTDOCUMENT
--- Ende Code ---
weist der Variablen ein Objekt der Klasse "NotesUIDocument" zu. Es repräsentiert das, was Du als Benutzer im Lotus Notes Client siehst.

Das NotesUIDocument hat eine Property "Document", mit der Du wieder zum Backend- Dokument der Klasse "NotesDocument" kommen würdest.

Dummerweise haben sowohl die NotesDocument als auch NotesUIDocument- Klasse eine Methode "Send". Nur dass die Methode unterschiedliche Parameter hat:
Aus der Designer- Hilfe (die Du auch z.B. hier online findest:
--- Zitat ---NotesDocument.Send
Syntax
Call notesDocument .Send( attachForm [, recipients ] )

Parameters
attachForm

Boolean. If True, the form is stored and sent along with the document. If False, it isn't. Do not attach a form that uses computed subforms.

recipients

String or array of strings. Optional. The recipients of the document. See below.
--- Ende Zitat ---

--- Zitat ---NotesUIDocument.Send
Syntax
Call notesUIDocument .Send

Usage
The document must contain a SendTo field indicating the recipients.

There are two kinds of fields that affect the mailing of the document:

If the document contains additional recipient items, such as CopyTo or BlindCopyTo, Notes mails the documents to these recipients, too.
If the document contains items to control the routing of mail, such as DeliveryPriority, DeliveryReport, or ReturnReceipt, Notes uses these when sending the document.
--- Ende Zitat ---

Also musst Du entweder Die Methode des uidoc ohne Parameter verwenden, oder eben die Zeile
--- Code: ---Set doc = ws.CURRENTDOCUMENT
--- Ende Code ---
so anpassen
--- Code: ---Set doc = ws.CURRENTDOCUMENT.Document
--- Ende Code ---

Benni1988:
Hallo zusammen,

zuerst einmal vielen Dank für eure ausführlichen Antworten.

Ich werde die Variablen deklarieren.

Fehlerroutinen werde ich später einbauen, da ich mich hierfür erst einlesen muss, und ehrlich gesagt noch nicht genau weiß, wie das geht (wie gesagt bin ja noch Anfänger).

Ich habe jetzt

Set doc = ws.CURRENTDOCUMENT

mit

Set doc = ws.CURRENTDOCUMENT.Document

ersetzt. (da mir das einfacher erschien)

Allerdings erhalte ich nun die Fehlermeldung

"Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht"


Und ich weiß leider wieder einmal nicht, was mir das genau sagt :(

Grüße

Peter Klett:
Set doc = ws.CURRENTDOCUMENT.Document
Call doc.GOTOFIELD("Body")

kann nicht funktionieren, denn GOTOFIELD gibt es nur für das NotesUIDocument

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln