Lotus Notes / Domino Sonstiges > OLE/COM-Programmierung

Lotus-Notes-Vorlage via Excel-Makro aufrufen

<< < (5/6) > >>

Drehstuhlpilot:
Okay, also mit dem Code ohne Navigator


--- Code: ---Sub SendMail()

Dim db As Object
Dim session As Object
Dim view As Object
Dim vorlagedoc As Object
Dim doc As Object
Dim note As Object
Dim ws As Object

Set session = CreateObject("Notes.NotesSession")
Set ws = CreateObject("Notes.NotesUIWorkspace")
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationery")

Set vorlagedoc = view.getFirstDocument
Do Until vorlagedoc Is Nothing
    If vorlagedoc.getItemValue("MailStationeryName")(0) = "<Vorlage>" Then Exit Do
    Set vorlagedoc = view.getNextDocument(vorlagedoc)
Loop

If Not vorlagedoc Is Nothing Then MsgBox "Vorlage: " + vorlagedoc.getItemValue("MailStationeryName")(0)

Call vorlagedoc.copyallitems(doc)

Set doc = vorlagedoc

With doc
.Form = "Memo"
Recipient = "MaxMustermann@live.com"
.sendto = Recipient
.Subject = "Betreff"
.body = "Nachrichtentext"
End With

Set doc = ws.EditDocument(True, doc)
Set db = Nothing
Set doc = Nothing
Set session = Nothing

End Sub

--- Ende Code ---

durchläuft er sämtliche Schritte, findet durch die Do-Loop-Schleife auch anscheinend die richtige Vorlage, erstellt auch im weiteren Verlauf eine Mail, nutzt hierbei jedoch die Vorlage nicht. :$

(Den Block mit den "Call note.[...]" nach


--- Code: ---Call vorlagedoc.copyallitems(note)
--- Ende Code ---
musste ich rausnehmen, da er mir den Laufzeitfehler 458 ausgab).

Beim Code mit Navigator und mit "nav.GetFirst" anstatt "nav.GetFirstEntry"


--- Code: ---Dim db As Object
Dim session As Object
Dim view As Object
Dim nav As Object
Dim vorlagedoc As Object
Dim ve As Object

Set session = CreateObject("Notes.NotesSession")
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationery")
Set nav = view.CreateViewNav()
Set ve = nav.GetFirst

found = False
While found = False And Not ve Is Nothing
    Set vorlagedoc = ve.Document
    If vorlagedoc.GetitemValue("MailStationeryName")(0) = "<Vorlagenname>" Then
        found = True
    End If
    Set ve = nav.GetNextentry(ve)
Wend

--- Ende Code ---

gibt er mir in der Zeile
--- Code: ---If vorlagedoc.GetitemValue("MailStationeryName")(0) = "<Vorlagenname>" Then
--- Ende Code ---
wieder den Laufzeitfehler 91.  ???

Tode:
Das war es was ich meinte: Du VERSTEHST den Code nicht, den Du einsetzt.

Im ersten Beispiel z.B. erstellst Du KEIN neues Dokument doc, sondern verweist auf das vorlagedoc... Und die Reihenfolge ist ausserdem falsch rum, weshalb natürlich ein CopyAllItems fehlschlägt...

Statt
--- Code: ---Call vorlagedoc.copyallitems(doc)
Set doc = vorlagedoc
--- Ende Code ---
müsstest Du schreiben:

--- Code: ---Set doc = db.CreateDocument()
Call vorlagedoc.copyallitems(doc)

--- Ende Code ---

Im zweiten Beispiel ist es so, dass die Ansicht auch Kategorien enthält. Und diese bekommst Du mit getfirst... Diese Kategorien haben kein Dokument, es müsste also ein If ve.IsDocument then vor das Set vorlagedoc =...

Aber mir wird das Ganze jetzt hier zu aufwändig, ich bin raus.
Viel Glück weiterhin.

jBubbleBoy:
@torsten: man fängt immer klein an ;)
@drehstuhl: du hast es fast geschafft:

--- Code: ---Dim db As Object
Dim session As Object
Dim view As Object
Dim vorlagedoc As Object
Dim docMail As Object
Dim note As Object
Dim ws As Object

Const vorlage = "<<Vorlage>>"

Set session = CreateObject("Notes.NotesSession")
Set ws = CreateObject("Notes.NotesUIWorkspace")
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationery")

Set vorlagedoc = view.getFirstDocument
Do Until vorlagedoc Is Nothing
    If vorlagedoc.getItemValue("MailStationeryName")(0) = vorlage Then Exit Do
    Set vorlagedoc = view.getNextDocument(vorlagedoc)
Loop

If vorlagedoc Is Nothing Then MsgBox "Vorlage ''" + vorlage + "'' wurde nicht gefunden": Exit Sub

Set docMail = db.createDocument
Call vorlagedoc.copyallitems(docMail)
docMail.Save True, False
Call ws.EditDocument(True, docMail)

--- Ende Code ---

Drehstuhlpilot:
Perfekt, so funktioniert's! Vielen Dank!

Tode:
Nein, so funktioniert es nur teilweise... Du musst unbedingt nach dem CopyAllItems die Vorlagen- spezifischen Felder entfernen, sonst hast Du sehr seltsame Nebenwirkungen, entweder beim Absender oder beim Empfänger (z.B. die neuen Mails werden alle als Vorlage angezeigt, diese Mails können nicht archiviert werden, etc.)...

Bitte ergänze nach dem CopyAllitems noch unbedingt die von mir geposteten Zeilen:

--- Code: --- Call note.RemoveItem("$VersionOpt")
Call note.RemoveItem("$NoPurge")
Call note.RemoveItem("ProtectFromArchive")
Call note.RemoveItem("MailStationeryName")
Call note.RemoveItem("IsMailStationery")
'- diese Zeile kannst Du weglassen, wenn Du die Signatur angängen willst und nicht "Skippen"
Call note.ReplaceItemValue("tmpSkipSignature","1")
--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln