Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Mail über Lotus Notes - Noch 1 Problem :)
12.01.2009 14:59:25
Christoph
Erst mal Hallo zusammen!
Ich bin neu hier im Forum und möchte mich an dieser Stelle auch erst mal für die vielen guten Tips, die mir immer geholfen haben bedanken!
Nun möchte ich mich auch etwas am Geschehen beteiligen und bringe auch gleich noch 1 Frage mit...
Folgendes:
Also ich habe ein Modul geschrieben,mit dem der Versand einer email über Lotus Notes heraus realisiert werden soll!
In unsrer Firma habe ich ein Programm geschrieben,das aktiv in der Produktion von Instandhaltungspersonal sowie Fertigungsleitung benutzt wird.
Es existiert ein Menupunkt,unter dem der Anwender mir (also Admin) eine email senden kann.
Es öffnet sich eine Userform mit Textfeld.
Hier kann der Anwender dann seine Nachricht eintippen und muss nur noch auf "Senden" klicken,
danach geht alles vollautomatisch - meine email-Adresse ist im VBA hinterlegt,Betreff ändert sich über Variable usw...
Lotus Notes bleibt auch im Hintergrund,sodaß der Benutzer dann nur noch eine msgbox auf seiner Programmoberfläche erhält,daß die Nachricht erfolgreich versandt wurde.
Das ganze funktioniert aber nur,wenn Lotus Notes schon offen ist...
Wo wir bei meinem Problem wären:
Ich kriege es über den Shell-Befehl noch hin,Lotus Notes inklusive der jeweils persönlichen *ini.Datei zu öffnen,und auch Excel wieder in den Vordergrund zu holen krieg ich auch hin,nur das Problem ist:
In der VBA läuft der Code natürlich unbehelligt weiter,während der Benutzer ja noch sein Passwort auf dem sich öffnenden Lotus-Anmeldeseite eintragen muss,das dauert natürlich länger als VBA braucht!
Die Folge: Ein Laufzeitfehler, weil VBA senden will,aber LN noch nicht soweit ist...
Mein erster Gedanke war: Ich baue eine kurze Pause ein,also nach dem Öffnen-Befehl für Notes:
Application.Wait (Now + TimeValue("0:00:15"))
Aber was,wenn der Benutzer länger braucht?
Diese Frage stellt sich selbst bei einer Wartezeit von 1 Minute,man weiß ja nie,was gerade ist - das Telefon klingelt oder er erzählt gerade und und und...
Das führt dann natürlich zu einem Problem und VBA bringt ein Fehler-Fenster "Objekt-Laufzeitfehler"
-Logisch- Lotus Notes ist ja noch nicht offen!
Jetzt möchte ich wissen:
Ist es möglich,mit dem VBA-Code an dieser Stelle solange zu warten bis ich mit irgendeiner Abfrage im Programm dann sagen kann:
Ja...Lotus Notes ist VOLLSTÄNDIG geöffnet!
Also,daß mein Programm-Code solange wartet bis LN vollständig geöffnet wurde?
Wie kann man sowas abfragen,das wäre viel sicherer als die "Application.Wait"-Methode (Davon möchte ich auch weg,das kann man so nicht lassen!)
Hier zur Sicherheit noch den Code:
(Wichtig sind eigentlich nur die ersten paar Zeilen)

Sub NotesMail()
Dim strEmpfaenger, strBetreff, strText, strcc, strbcc As String
Dim strFile As String
Dim Merker
Dim Merkertext
Application.ScreenUpdating = False
Shell "C:\Program Files\Lotus\Notes\notes.exe " & _
"=H:\Notes\data\notes.ini", vbMinimizedFocus
AppActivate "Microsoft Excel"
'Application.Wait (Now + TimeValue("0:00:25"))
Application.Goto reference:="NextID"
Merker = ActiveCell
Application.Goto reference:="Benutzerstart"
While ActiveCell = Merker = False
Application.ActiveCell.Offset(1, 0).Select
Wend
Application.ActiveCell.Offset(0, -1).Select
Merker = ActiveCell
Application.Goto reference:="Mail"
Merkertext = ActiveCell
strEmpfaenger = "XXXXX@XXXX.com"
strBetreff = "Email von Benutzer """ & Merker & """ aus Programm XXXXX"
strText = "Test1"
strText = Merkertext
'strFile = "H:\XXXXXX\
NotesMailSend strEmpfaenger, strBetreff, strText, strcc, _
strbcc, strFile
Sheets("Liste").Activate
End Sub



Function NotesMailSend(strEmpfaenger As Variant, strBetreff As Variant, _
strText As Variant, strcc As Variant, strbcc As Variant, strFilename As _
String)
' Dimensionierung der Objektvariablen
Dim objNotes As Object, objNotesDB As Object, objNotesMailDoc As Object
Dim SendItem, NCopyItem, BlindCopyToItem, i As Integer, rtitem
Dim msg As String
' Zuweisung der Objektvariablen
'On Error GoTo ExitF
Set objNotes = GetObject("", "Notes.Notessession")
Set objNotesDB = objNotes.GETDATABASE("", "")
' Öffnen der Standard-Maildatenbank / Erstellen neues Maildokument
Call objNotesDB.OPENMAIL
Set objNotesMailDoc = objNotesDB.CREATEDOCUMENT
objNotesMailDoc.Form = "Memo"
Call objNotesMailDoc.Save(True, False)
Set SendItem = objNotesMailDoc.APPENDITEMVALUE("SendTo", "")
Set NCopyItem = objNotesMailDoc.APPENDITEMVALUE("CopyTo", "")
Set BlindCopyToItem = objNotesMailDoc.APPENDITEMVALUE("BlindCopyTo", "")
objNotesMailDoc.sendto = strEmpfaenger
objNotesMailDoc.Subject = strBetreff
Set rtitem = objNotesMailDoc.CREATERICHTEXTITEM("Body")
objNotesMailDoc.Body = strText
rtitem.ADDNEWLINE (1)
'Call rtitem.EMBEDOBJECT(1454, "", strFilename)
' Mail zustellen
Call objNotesMailDoc.Save(True, False)
Call objNotesMailDoc.send(False)
objNotesMailDoc.RemoveItem ("DeliveredDate")
Call objNotesMailDoc.Save(True, False)
' Nachricht an Benutzer
msg = "Die E-Mail wurde erfolgreich versendet!"
MsgBox msg, vbInformation, "Notesmail versenden..."
' Objektvariablen zurücksetzen
Call objNotes.Close
' Leider funktioniert der Quit-Befehl aus irgend einem Grund nicht.
'objNotes.Quit
Set objNotes = Nothing
ExitF:
End Function


Schon mal vielen Dank im Vorraus :)
Gruß Christoph

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mail über Lotus Notes - Noch 1 Problem :)
12.01.2009 17:41:31
Luschi
Hallo Christoph,
hier kann Dir die API-Funktion 'WaitForSingleObject' weiterhelfen:
z.B: http://support.microsoft.com/kb/507967/de
Du mußt allerdings den Shell-Befehl als Funktion starten, um den Rückgabewert zu prüfen.
Gruß von Luschi
aus klein-Paris
AW: Mail über Lotus Notes - Noch 1 Problem :)
13.01.2009 07:56:00
Christoph
Hallo Luschi!
Vielen Dank für deine Antwort,doch leider ist es nicht gaaaanz das was ich gesucht hab...
Der "WaitForSingleObject" - Befehl hier bewirkt nämlich,daß sich mein Programm solange in einer Schleife befindet,bis das aufgerufene Programm WIEDER GESCHLOSSEN wird!
Also erst,wenn ich (wie in diesem Fall) das Programm Notepad wieder geschlossen habe,läuft mein VBA weiter!
' Wartet bis Shell-Anwendung geschlossen ist:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue 258
ReturnValue = CloseHandle(proc.hProcess)
End Sub
Vielleicht wäre es ein leichtes,das so zu ändern,das meine VBA die Schleife hält,bis das Programm komplett geöffnet ist?
Gruß Christoph
Anzeige
AW: Mail über Lotus Notes - Noch 1 Problem :)
14.01.2009 10:17:00
Luschi
Hallo Christoph,
habe noch mal ein bischen gegoogelt und diesen Beitrag gefunden:
http://www.wer-weiss-was.de/theme9/article280238.html
Allerdings muß man den Aufruf entgegen dem Beitrag so starten:
SyncShell "c:\Irgendeine.exe", 0, True, True
Das 1. True Wartet bis zum vollständigen Start des externen Programms
(bei False bis zum Schließen des Programms)
Das 2. True startet das Programm im Hintergrund (bei Outlook funktioniert dieser Parameter nicht bei mir)
Gruß von Luschi
aus klein-Paris
Anzeige

132 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige