Domino 9 und frühere Versionen > ND9: Administration & Userprobleme
E-Mailversand aus Excel geht mit LN 9 nicht mehr
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