AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
24.04.19 - 20:20:43
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  OLE/COM-Programmierung
| | |-+  Lotus-Notes-Vorlage via Excel-Makro aufrufen
« vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: Lotus-Notes-Vorlage via Excel-Makro aufrufen  (Gelesen 12564 mal)
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« am: 17.01.18 - 15:46:30 »

Hallo,

ich versuche seit geraumer Zeit mithilfe eines Excel-Makros, eine Mail-Vorlage in Lotus Notes (8.5.3FP6 SHF784) zu öffnen und nutze dazu folgenden Code:

Code:
Sub SendMail()

Dim Maildb As Object
Dim UserName As String
Dim MailDbName As String
Dim MailDoc As Object
Dim session As Object
Dim Recipient As String
Dim attachment As String

Set session = CreateObject("Notes.NotesSession")
Set Maildb = session.currentdatabase
Set MailDoc = Maildb.CreateDocument("", "", "Vorlage")

attachment = "<Pfad zum Anhang>"

MailDoc.Form = "Memo"
Recipient = "MaxMustermann@live.com"
MailDoc.sendto = Recipient
MailDoc.Subject = "Betreff"
MailDoc.body = "Nachrichtentext"

stAttachment = ActiveWorkbook.FullName
Set AttachME = MailDoc.CREATERICHTEXTITEM("stAttachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", attachment, "stAttachment")
                       
MailDoc.SAVEMESSAGEONSEND = True
MailDoc.SEND 0, Recipient
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set session = Nothing
Set EmbedObj = Nothing

End Sub

Leider scheitere ich daran, dass Notes die Vorlage nicht aufrufen will. Habe schon diverse Lösungsansätze von Usern mit ähnlich gelagertem Problem ausprobiert, jedoch waren dort noch weitere andere Baustellen, sodass ich zu diesem konkreten Problem noch keine wirkliche Lösung finden konnte.

Muss die Vorlage (lokal im Client über "Werkzeuge->Vorlage->Neue Vorlage" erstellt) mit einem anderen Befehl angesteuert bzw. aufgerufen werden?

Btw: Agentenrechte nicht vorhanden.

Danke im Voraus.
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #1 am: 17.01.18 - 16:24:56 »

Ok.... Also erstmal ein paar Fragen:

- Willst Du eine NEUE Vorlage erstellen, oder eine vorhandene öffnen?
- Willst Du die Mail zum bearbeiten öffnen oder direkt versenden?
Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #2 am: 17.01.18 - 17:52:09 »

Die Vorlage existiert bereits und soll nur noch durch das Makro geöffnet werden.

Ursprünglich war geplant, die Mail direkt zu versenden. Falls umsetzbar, wäre es jedoch super, wenn sie nach Erstellung durch das Makro noch einmal überprüft und ggf. bearbeitet werden könnte.

Gespeichert
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1109



« Antworten #3 am: 17.01.18 - 18:26:18 »

Dein Code versendet die Mail, das muss ersetzt werden mit:
Code:
Dim ws As Object
Set ws = CreateObject("Notes.NotesUIWorkspace")
set mailUiDoc = ws.editDocument( true, mailDoc )
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.6
--
Nur ein toter Bug, ist ein guter Bug!
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #4 am: 18.01.18 - 08:07:08 »

Das klappt schonmal einwandfrei, top!

Jetzt bleibt nur noch das Problem mit der zu öffnenden Vorlage.
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #5 am: 18.01.18 - 08:46:33 »

Du holst Dir die Ansicht mit allen Vorlagen mittels NotesDatabase.getView( "Stationery" ).
Dann holst Du die entsprechende Vorlage aus dieser Ansicht über NotesView.GetDocumentByKey( "Name der Vorlage") (geht nicht, weil Ansicht nicht sortiert nach Name)
einen NotesViewNavigator und einer While- Schleife, in der Du die NotesViewEntry- Elemente prüfst, ob Sie Deinen Vorlagennamen haben.

Dann benutzt Du den Code aus dem "QueryOpendocument"- Event der Ansicht (Stationary) um aus dieser Vorlage eine neue Mail zu generieren:

Code:
Dim note As New NotesDocument(db)
Call vorlagedoc.copyallitems(note)
Call note.ReplaceItemValue("Form",vorlagedoc.Form(0))
Call note.RemoveItem("$VersionOpt")
Call note.RemoveItem("$NoPurge")
Call note.RemoveItem("ProtectFromArchive")
Call note.RemoveItem("MailStationeryName")
Call note.RemoveItem("IsMailStationery")
Call note.ReplaceItemValue("tmpSkipSignature","1")

Dann füllst Du den Empfänger und ggf. andere Daten (wie Du es in Deinem Code schon machst) und versendest das Ding über note.Send
« Letzte Änderung: 18.01.18 - 08:48:18 von Tode » Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #6 am: 18.01.18 - 10:43:41 »

Okay, also mit dem NotesViewNavigator bin ich nun leicht überfordert. Wenn ich versuche, den Navigator via

Code:
Set NotesViewNavigator = NotesView.CreateViewNav

festzulegen, gibt er mir den Laufzeitfehler 91 (Objektvariable oder With-Blockvariable nicht festgelegt).

Wenn ich NotesView via

Code:
Set NotesView = NotesDatabase.getView("Stationary")

festlegen möchte, gibt er mir den Laufzeitfehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht).

Irgendwie steh' ich auf dem Schlauch...  Huh

Gespeichert
Andrew Harder
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 278



« Antworten #7 am: 18.01.18 - 12:39:53 »

Also wenn Du die View schon nicht bekommst, wirst Du Dir von der nicht vorhandenen View auch keinen Navigator erstellen können.
Soweit logisch.
Leider fehlt der Rest vom Code, muss man dann halt raten.

Am besten mal den Testcode in einen Agent packen und den Debugger anwerfen.
sollte in etwa so etwas sein - fast zu 100% aus der Notes Designerhifle kopiert:
Code:
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim nav As NotesViewNavigator

set session = New NotesSession
Set db = session.CurrentDatabase
Set view = db.GetView("Stationary")
Set nav = view.CreateViewNav()
Gespeichert

Andy
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #8 am: 18.01.18 - 12:54:40 »

Du kennst aber schon den Unterschied zwischen Klassen (NotesDatabase, NotesView, NotesViewNavigator) und daraus instantiierten Variablen, oder?
Weil wenn nicht, dann müssten wir Dir hier den kompletten Code runtertippen und Du müsstest ihn einsetzen ohne zu verstehen, was da passiert... Das ist nicht Sinn des Forums.

Denn: Code im Auftrag zu schreiben ist mein Job (und der von vielen anderen im Forum), das werde ich nicht kostenlos im Forum anbieten.
Hilfe zur Selbsthilfe dagegen schon.

EDIT: Nur nebenbei: Dein Set MailDB = session.CurrentDatabase funktioniert nur, wenn die Mail- Datenbank zufällig die gerade geöffnete Datenbank im Client ist... Wenn Du gerade im persönlichen Adressbuch stehst, dann wird der ganze Code knallen...

Set MailDB = Session.CreateDatabase( "", "" )
Call mailDB.OpenMail()

wäre richtig...
« Letzte Änderung: 18.01.18 - 12:57:23 von Tode » Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #9 am: 18.01.18 - 15:01:38 »

Also mit den Notes-Klassen kann das VBA hier leider nichts anfangen. Evtl. wurde die .dll auch noch gar nicht registriert. Aus einer Prüfung der regedit wir leider auch nichts, da keine Rechte vorhanden sind. :$

Im Folgenden dennoch mal der Code bis zur (geplanten) Erstellung des Navigators:

Code:
Dim session As Object
Dim db As Object
Dim view As Object
Dim nav As Object

set session = New NotesSession
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationary")
Set nav = view.CreateViewNav()

In der letzten Zeile gibt er nach wie vor den Laufzeitfehler 91. Vermutlich wegen der fehlenden library...
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #10 am: 18.01.18 - 15:19:00 »

Dass VBA mit den Klassen nichts anfangen kann ist vollkommen egal und normal. Mache doch bitte mal nach Call db.OpenMail ein Msgbox db.Title & " - " & db.Server & " - " & db.FilePath

Ist das wirklich die Mail- Datenbank des aktuellen Benutzers?

Ach ja: Stationary ist falsch. Die Ansicht heisst Stationery
Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #11 am: 18.01.18 - 16:39:05 »

Wie's aussieht läuft der Navigator nun. Die Mail-Datenbank ist auch tatsächlich die richtige.

Allerdings scheitere ich nun bereits im Ansatz bei der While-Schleife zum Prüfen der NotesViewEntry-Einträge und werde mich wohl oder übel nach einer anderen Lösung umsehen müssen.

Dennoch nochmal vielen Dank für die Hilfe und Unterstützung.
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #12 am: 18.01.18 - 16:53:18 »

Nicht gleich verzweifeln... Einmal gebe ich Dir noch nen "Schubs" in die richtige Richtung:

Code:
found = False
Set ve = nav.GetFirstEntry()
While found = false and not ve is Nothing
  Set vorlagedoc = ve.Document
  If vorlagedoc.GetitemValue( "MailStationeryName" )(0) = "Name Deiner Vorlage" Then
    found = True
  End If
  Set ve = nav.GetNextentry(ve)
Wend

if found = True then
  '- hier kommt der code, um eine Kopie zu erstellen
End If

Aber vermutlich wäre es wirklich das beste, jemanden zu engagieren... Denn von ErrorHandling, Reaktion wenn die Vorlage nicht existiert, Dokument zum bearbeiten öffnen, etc. haben wir ja überhaupt noch nicht gesprochen...
Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #13 am: 19.01.18 - 07:46:38 »

In der Zeile

Code:
Set ve = nav.GetFirstEntry()

wird der Laufzeitfehler 438 gemeldet. Muss ve hier als was anderes als Object deklariert werden?
Gespeichert
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1109



« Antworten #14 am: 19.01.18 - 09:13:09 »

zeig doch mal deinen ganzen Code, nur eine Zeile ist da nicht ausreichend.
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.6
--
Nur ein toter Bug, ist ein guter Bug!
Drehstuhlpilot
Frischling
*
Offline Offline

Beiträge: 11


« Antworten #15 am: 19.01.18 - 09:42:17 »

Code:
Sub SendMail()

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.GetFirstEntry()

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
Gespeichert
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1109



« Antworten #16 am: 19.01.18 - 09:57:23 »

OK, da eh auf das Backend-Dokument zugegriffen wird und nicht der NotesView-Index ausgewertet wird - kann man sich den NotesViewNavigator auch schenken und die Ansicht auf klassischer, einfachen Art durchlaufen, das ist bei den Mail-Vorlagen auch nicht falsch, der Code sieht dann so aus:
Code:
Dim db As Object
Dim session As Object
Dim view As Object
Dim vorlagedoc As Object

Set session = CreateObject("Notes.NotesSession")
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)
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.6
--
Nur ein toter Bug, ist ein guter Bug!
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6203


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #17 am: 19.01.18 - 10:03:45 »

Ich glaube, das Problem ist ein anderes: Ich glaube, dass VBA mit dem Set nicht zurecht kommt, was man in LotusScript ja unbedingt braucht... Probiere das mal wegzulassen... Bin mir aber nicht sicher...
Gespeichert

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

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1109



« Antworten #18 am: 19.01.18 - 10:08:17 »

Set wird in VBA genauso benötigt wie in LotusScript.
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.6
--
Nur ein toter Bug, ist ein guter Bug!
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1109



« Antworten #19 am: 19.01.18 - 10:15:15 »

Der Fehler beim NotesViewNavigator besteht in "nav.GetFirstEntry", das müsste korrekter weise "nav.GetFirst" heißen, für den Fall das ihr mit dem NotesViewNavigator weitermachen wollt Wink
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.6
--
Nur ein toter Bug, ist ein guter Bug!
Seiten: [1] 2 Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: