Autor Thema: Lotus-Notes-Vorlage via Excel-Makro aufrufen  (Gelesen 75673 mal)

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #20 am: 19.01.18 - 10:59:58 »
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

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)
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

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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #21 am: 19.01.18 - 11:57:01 »
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
müsstest Du schreiben:
Code
Set doc = db.CreateDocument()
Call vorlagedoc.copyallitems(doc)

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.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #22 am: 19.01.18 - 12:28:08 »
@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)
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #23 am: 22.01.18 - 07:27:18 »
Perfekt, so funktioniert's! Vielen Dank!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #24 am: 22.01.18 - 09:41:05 »
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")
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #25 am: 22.01.18 - 09:54:36 »
Alles klar. Danke nochmal für den Hinweis!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz