"Excel minimieren - Outlook - Excel maximieren" Hat doch nicht geklappt
#1
Schönen Sonntag Euch allen.

Ich komm nicht weiter.
Ich hab nen Command-Butten erstellt; wenn man drauf klickt, soll das Makro Mail abgearbeitet werden. Hierbei soll zuerst das Excel-Fenster minimiert und dann das Outlook Mail-Fenster maximiert werden . Wenn in Outlook auf "Senden" oder auf "Beenden" (x oben rechts) geklickt wird, soll Outlook zugehen.

Bis hierhin alles gut.

Dann soll aber das Excel-Fenster wieder maximiert werden.

Habe den folgenden Code ausprobiert und ihn in ein Modul gepackt:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Mail()
Dim objOutlook As Object
Dim objMail As Object
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
Application.WindowState = xlMinimized
With objMail
    .To = "test@asdf.com"
    .Subject = "Testweise"
    objMail.Display
Do
Sleep 1000
Loop Until objMail.Busy = False
.Quit
End With
Set objOutlook = Nothing
Set objMail = Nothing
Application.WindowState = xlMaximized
End Sub

Wie gesagt: Bis Outlook beenden klappt alles, dann aber blinkt das Excel-Fenster in der Taskleiste schon und die Fehlermeldung:
"Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht".

Beim Debuggen wird in der Office-Version (2016), die ich hier laufen hab, keine Zeile des Codes markiert. In der Office 2013 Version wird die Zeile "Loop Until objmail.Busy = False" gelb gemarkert.

Ich komm nicht weiter, bin aber auch nicht dieee riesige Leuchte, was VBA angeht. Bin da eher bescheiden und sag: Blicke da meist nicht durch. :17:
Aber ich hab rausgefunden, dass das Sleep korrekt ist, was ich erst nicht glauben wollte. Aber es schaut immer nach, ob Outlook noch läuft.

Für entsprechende Hilfe wäre ich äußerst dankbar!

Liebe Grüße
Jochen
Top
#2
Hallo Jochen
Dein zuletzt geposteter Code funktioniert bei mir Windows7 / Office 2013 nicht. Fehler bei .Quit und in dieser Sleep-Schleife. Zudem bin ich schon erstaunt, wie hartnäckig Du an diesen xlMinimized- und xlMaximized-Befehlen klebst. Ich arbeite seit über 20 Jahren mit Excel und habe die Dinger noch nie gebraucht. Auftretende Fehler beseitigt man nicht durch hinzufügen von irgend welchem Ballast.
Mit dem unten stehenden Überblick habe ich mein Pulver verschlossen. Wenn das bei Dir nicht funktioniert, dann solltest Du das Problem nicht zu lösen versuchen, indem Du einfach weitere Zeilen in Deinen Code reinschreibst (auch dann nicht, wenn man Dir die zuflüstert). Hast denn auch die richtigen Verweise gesetzt?

Dein Code habe ich zurechtgestutzt, so dass er bei mir ganz klaglos läuft:
Code:
'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub Mail()
   Dim objOutlook As Object
   Dim objMail As Object
   Set objOutlook = CreateObject("Outlook.Application")
   Set objMail = objOutlook.CreateItem(0)
   'Application.WindowState = xlMinimized
   With objMail
       .To = "test@asdf.com"
       .Subject = "Testweise"
       .Display
       'Do
       'Sleep 1000
       'Loop Until objMail.Busy = False
       '.Quit
   End With
   Set objOutlook = Nothing
   Set objMail = Nothing
   'Application.WindowState = xlMaximized
End Sub
Den von mir gepostete Code funktioniert auch klaglos, wenn ich denn die Mail-Adresse in "" setze:
Code:
Public Sub Mail_1()
   Dim objOutlook As Object
   Dim objMail As Object
   Set objOutlook = CreateObject("Outlook.Application")
   Set objMail = objOutlook.CreateItem(0)
   With objMail
       .To = "test@asdf.com"
       .Subject = "testweise"
       .Display
   End With
End Sub
Top
#3
Hallo Helvetier,

jetzt wird es ganz konfus. Ich habe den Code entsprechend Deinen Ideen angepasst und meinem ursprünglichen Code angepasst:

Public Sub Mail()
   Dim objOutlook As Object
   Set objOutlook = CreateObject("Outlook.Application")
   Dim objEmail As Object
   Set objEmail = objOutlook.CreateItem(0)
   With objEmail
       .To = asdf@gfh.com
       .Subject = "testest"
       .Display
   End With
End Sub

Jetzt kommt auf einmal folgender Fehlercode, während ich die Datei in der Arbeit (Outlook-Version 14) teste:

Laufzeitfehler '-2147287037(8003003)
Fehler beim Ausführen der Operation.

Im VBA-Editor wird die folgende Zeile moniert:
Set objEmail = objOutlook.CreateItem(0)

Hast ne Idee?

Irgendwie ist das verhext: Das Mail-Fenster geht nicht auf, bleibt in der Taskleiste kleben und erscheint trotz .Display nicht auf dem Bildschirm, (deswegen das mit Mini- und Maximize). Loop klappt nicht. Jetzt dieser komische Fehler.

Als Verweis hab ich zusätzlich die "Microsoft Outlook 14.0 Object Library" gesetzt. Hoffe, dass das ausreicht.

Ich jedenfalls hab keinen Plan mehr und werde, falls niemand ne Idee hat, wie es weitergeht, diese Funktion einfach entfernen. Kostet Nerven, und dazu hab ich keine Lust.

Ich wünsch einen guten Morgen!
Jochen
Top
#4
(26.09.2017, 02:11)morgandalf schrieb:        .To = asdf@gfh.com

Als Verweis hab ich zusätzlich die "Microsoft Outlook 14.0 Object Library" gesetzt.
Hallo Jochen
1. VBA ist nicht so tolerant wie z.B. Kochen: persönliche Variationen sind nicht zulässig: ich habe darauf hingewiesen und trotzdem machst Du es nicht:   .To = asdf@gfh.com ist falsch,   .To = "asdf@gfh.com" ist richtig. So abgeändert, läuft der Code klaglos.
2. Welche Verweise hast denn sonst noch gesetzt? Liste die doch bitte mal lückenlos auf. Ich insistiere weil der Verweis, den Du angibst, ich nicht gesetzt habe und es funktioniert trotzdem: auch logisch: das Makro befindet sich in der Excel-Umgebung.
Gruss
Top
#5
Hallo Helvetier,

vielen Dank für Deine Antwort und der durchaus berechtigten Kritik.

Das war ein Zitierungsfehler, dieses .To = asdf@gfh.com ohne Anführungszeichen. Ich hatte den Code in die Zwischenablage kopiert und dann die Adresse geändert. Dabei sind dann wohl aus Unachtsamkeit die Anführungsstriche durch mich übersehen worden. Bitte entschuldige den Lapsus. Im wirklichen Code hab ich die Anführungszeichen gesetzt.

Mein richtiger Code sieht wirklich so aus:
Public Sub Mail()
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")
Dim objEmail As Object
Set objEmail = objOutlook.CreateItem(0)
With objEmail
    .To = "jsdf@asdf.com"
    .Subject = "Testwiese"
    .Display
   End With
End Sub

Es bleibt bei dem Phänomen:
Der Code hier zu Hause läuft ohne Probleme und anstandslos durch, manch mal erscheint allerdings erscheint Outlook als Mail-Symbol in der Taskleiste, das müde vor sich her blinkt.


Der selbe Code in der Arbeit bleibt hängen bei der Zeile:
Set objEmail = objOutlook.CreateItem(0). Da erscheint auf der in der letzten Mail beschriebene Fehler:

Laufzeitfehler '-2147287037(8003003)

Fehler beim Ausführen der Operation.


Arbeit - zu Hause - hier muss wohl irgendwo ein Unterschied liegen.


Die Verweise hier Zu Hause kann ich Dir einfach mal problemlos auflisten, die von Hause aus gesetzt sind:

-Visual Basics for Applications
-Microsoft Excel 16.0 Object Library
-Ole Autamation
-Microsoft Offie 16.0 Object Library
-Mircosoft Forms 2.0 Object Library
-Microsoft Scripting Runtime

Mehr sind es nicht. Sonst ist da kein Häckchen gesetzt

Die Verweise, die in der Arbeit gesetzt habe bwz. die von Hause aus gesetzt waren, kann ich Dir erst heute Nacht schicken. Werde ich dann auch tun heute Nacht.

Nochmals sorry für den Lapsus beim Zitieren des Codes. Tut mir echt leid.
Aber ist doch echt spannend, wie manche Codes reagieren: Da gehen sie garn nicht (Arbeit) -  da laufen sie problemlos (Zu Hause) durch, zwar manchmal nur als Mailsymbol in der Taskleiste, das müde vor sich hinblinkt.


Kurz: Arbeit gar nicht - zu Hause meistens, mit seltenen Ausfällen.

Aber vielleicht kannst Du ja was aus den Verweisen, die ich Dir heut Nacht schicke, was herauslesen und entdecken.

Was die Sache mit dem Code in der Arbeit angeht: Da läuft Windows 7 und Office 2010 (Ich glaub Versionsnummer14) . Die Verweise suche ich dann noch raus, ok.

Vielen Dank für Deine MÜhen, Deine Kritik
Jochen
Top
#6
Hallo Jochen
Interessant zu hören, dass Du auf 2 Rechnern versuchst.
Bei mir sind folgende Verweise gesetzt:
-Visual Basics for Applications
-Microsoft Excel 15.0 Object Library
-Ole Automation
-Microsoft Offie 15.0 Object Library

Mit Microsoft Scripting Runtime habe ich versucht: läuft problemlos
Auf meinem Rechner finde ich den nicht: Mircosoft Forms 2.0 Object Library

Hast Du schon mal versucht auf einer total neuen Datei den Code laufen zu lassen? Alle andern Excel-Dateien bitte schliessen. Natürlich auf beiden Maschinen. Das würde ich schon mal empfehlen: ich habe einen Verdacht.

Den Code mit F8 durchzujoggen (wenn Du das nicht schon gemacht hast) liefert vielleicht Hinweise.
Gruss
Top
#7
Hallo Helvetier,

ich hab hier in ner ganz neuen Datei getestet. Kein Problem, alles läuft, zumindest hier zu Haus. Aber auch hier: Outlook bleibt öfter auf der Taskleiste, blinkt dort rum, ist aber nicht im Vordergrund. Manchmal kommt es auch direkt auf den Bildschirm..

In der Arbeit ist das schwieriger, müsste die Datei erst in die Zentrale nach Hamburg schicken zum signieren, da sonst die Makros nicht funktionieren (entsprechende Sicherheitseinstellungen).

Aber ich versuch es, vielleicht signieren die mir die Datei.

Ich meld mich heut abend und schreib Dir die Verweise auf, die in der Arbeit gesetzt sind.

Schöne Grüße einstweilen
Jochen
Top
#8
(26.09.2017, 16:07)morgandalf schrieb: 1. Aussage
ich hab hier in ner ganz neuen Datei getestet. Kein Problem, alles läuft, zumindest hier zu Haus.

2. Aussage
Aber auch hier: Outlook bleibt öfter auf der Taskleiste, blinkt dort rum, ist aber nicht im Vordergrund. Manchmal kommt es auch direkt auf den Bildschirm..

Hallo Jochen
Ich verstehe Deine Aussagen nicht:
1. Aussage: hurra, alles in Ordnung!
2. Aussage: es funktioniert doch nicht!
Betreffen diese 2 Aussagen ein und dieselbe Datei? Gibt es in dieser Datei gar keine anderen Makros: weder in "Diese Arbeitsmappe", noch in den "Tabellen1" oder "Tabelle2" ...oder TabelleN", noch in einem Modul? Ich denke dabei an Makros mit Ereignisprozeduren.
Gibt es sicher auch keine Userforms oder Klassenmodule mit Prozeduren?
Oder gibt es in der Personal.xlsb Ereignisprozeduren, die losbrechen können?
Wie hast Du bei diesem Test das Makro gestartet? Ich hoffe über Ansicht > Makros > Makros anzeigen > Prozedur "Mail" auswählen > ausführen.
Schick mir doch bitte die Mappe die Du als ganz neu bezeichnest (als .xlsm). Ausnahmsweise öffne ich sie dann.

Dann dieses Theater: Mappe mit einem winzigen Makro drin nach Hamburg schicken zur Homologierung? So kann man doch nicht arbeiten! Aber das ist Dein und Euer Problem.
Gruss
Top
#9
GEnau, so kann man nicht arbeiten.

Wenn man nicht weiß, was digitale Signierung bedeutet und wozu Großunternehmen sie einsetzen, dann sollte man sich mit Verunglimpfungen eher zurückhalten.

Ich breche hiermit das Gespräch ab und bedanke mich für die - zwar teilweise stark arrogante - Aufmerksamkeit.

Mit freundlichen Grüßen
Jochen
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste