Meldung in Outlook (ohne Schaltflächen) unterhalb einer Sekunde anzeigen
System: Win7 x32 + Outlook 2007
Wäre es möglich in Outlook eine Meldung über VBA anhand UserForm für nur 500 Millisekunden auszugeben und wie?
Ausgereifter wäre es allerdings wenn diese Meldung (im Falle den Wert einer Variable, welche sich in ThisOutlookSession befindet) irgendwo in dem Fenster der neuverfassten Nachrichten (z. B. in der Statusleiste) ohne einen Timer permanent angezeigt wird.
Vorhaben:
Damit ihr den Fall besser versteht, gehe es hier konkret darum die Standardsprache für die Korrekturhilfe für den ausgewählten Text nach jeder Umschaltung irgendwo anzuzeigen. Da in der Praxis die Umschaltung von Sprache zu Sprache doch zu schnell erfolgt (da es zu viele Sprachen sind), soll sich der Popup auch nicht zu lang zögern, damit die Umschaltung zügig erfolgen kann und diese am Bildschirm nicht stört.
Wenn jedoch die aktuelle Korrektursprache irgendwo im Fenster (aber außerhalb des Textbereiches) angezeigt werden kann (was ja dann die beste Lösung wäre!), dann wäre ein Timer (TimeOut) überflüssig, da der aktuelle Status (EN, DE usw...) permanent angezeigt werden darf. So wäre es eindeutig viel praktischer.
Meine Versuche mit Statusbar=vMeineVar und sonstige UserForm-Experimentent scheiterten bisher.
Daher freue mich umso mehr für eure Hilfe . Sehr neugierig bin ich geworden, wie das Problem zu lösen wäre.
Gruß
Evinben
Wäre es möglich in Outlook eine Meldung über VBA anhand UserForm für nur 500 Millisekunden auszugeben und wie?
Ausgereifter wäre es allerdings wenn diese Meldung (im Falle den Wert einer Variable, welche sich in ThisOutlookSession befindet) irgendwo in dem Fenster der neuverfassten Nachrichten (z. B. in der Statusleiste) ohne einen Timer permanent angezeigt wird.
Vorhaben:
Damit ihr den Fall besser versteht, gehe es hier konkret darum die Standardsprache für die Korrekturhilfe für den ausgewählten Text nach jeder Umschaltung irgendwo anzuzeigen. Da in der Praxis die Umschaltung von Sprache zu Sprache doch zu schnell erfolgt (da es zu viele Sprachen sind), soll sich der Popup auch nicht zu lang zögern, damit die Umschaltung zügig erfolgen kann und diese am Bildschirm nicht stört.
Wenn jedoch die aktuelle Korrektursprache irgendwo im Fenster (aber außerhalb des Textbereiches) angezeigt werden kann (was ja dann die beste Lösung wäre!), dann wäre ein Timer (TimeOut) überflüssig, da der aktuelle Status (EN, DE usw...) permanent angezeigt werden darf. So wäre es eindeutig viel praktischer.
Meine Versuche mit Statusbar=vMeineVar und sonstige UserForm-Experimentent scheiterten bisher.
Daher freue mich umso mehr für eure Hilfe . Sehr neugierig bin ich geworden, wie das Problem zu lösen wäre.
Gruß
Evinben
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 208792
Url: https://administrator.de/contentid/208792
Ausgedruckt am: 24.11.2024 um 12:11 Uhr
34 Kommentare
Neuester Kommentar
Hallo Evinben,
für dein Vorhaben wäre vielleicht ein benutzerdefiniertes Formular in Outlook geeignet. Damit kannst du das Standardformular zum erstellen einer Nachricht mit weiteren Steuerelementen erweitern. Du könntest dann ein Label einfügen der eine benutzerdefinierte Property anzeigt, und diese Property änderst du im VBA-Projekt. Soweit die grobe Vorgehensweise.
Infos zum erstellen von Benutzerdefinierten Formularen findest du z.B. hier
Grüße Uwe
für dein Vorhaben wäre vielleicht ein benutzerdefiniertes Formular in Outlook geeignet. Damit kannst du das Standardformular zum erstellen einer Nachricht mit weiteren Steuerelementen erweitern. Du könntest dann ein Label einfügen der eine benutzerdefinierte Property anzeigt, und diese Property änderst du im VBA-Projekt. Soweit die grobe Vorgehensweise.
Infos zum erstellen von Benutzerdefinierten Formularen findest du z.B. hier
Grüße Uwe
Zitat von @evinben:
Der Timer muss in den Code rein und hier scheiterten meine Versuche in Outlook.
In Excel und in Access wäre es mit dem Timer kein Problem, jedoch für Outlook winde ich nichts passendes.
Zur Info:Der Timer muss in den Code rein und hier scheiterten meine Versuche in Outlook.
In Excel und in Access wäre es mit dem Timer kein Problem, jedoch für Outlook winde ich nichts passendes.
Ein simpler Timer könnte in Outlook so aussehen:
Sub myTimer()
start:
EndTime = Timer + 5
While Timer < EndTime
DoEvents
Wend
MsgBox "5 Sekunden verstrichen"
GoTo start
End Sub
Zitat von @evinben:
Nun bleibt es den Wert der Variable, welche sich in ThisOutlookSession befindet, an UserForm(ular) so zu übergeben, so dass ihr Text dann in der Meldung ohne irgendwelchen Schaltflächen angezeigt wird.
Deklariere die Variable als Public in ThisOutlookSession, dann machst du im Activate-Event der Form folgendes:Nun bleibt es den Wert der Variable, welche sich in ThisOutlookSession befindet, an UserForm(ular) so zu übergeben, so dass ihr Text dann in der Meldung ohne irgendwelchen Schaltflächen angezeigt wird.
Private Sub UserForm_Activate()
Label1.Caption = ThisOutlookSession.NAME_DEINER_VARIABLEN
End Sub
Hallo evinben!
Alternativ zu Colinardos Vorschlag:
Erstelle eine UserForm1 mit Meldetext (ohne Buttons), füge den Code in ein Modul ein und starte die Sub 'SendMsg'
Gruß Dieter
[edit] Divisor (400) durch regulären Divisor (86400) ersetzt [/edit]
Alternativ zu Colinardos Vorschlag:
Erstelle eine UserForm1 mit Meldetext (ohne Buttons), füge den Code in ein Modul ein und starte die Sub 'SendMsg'
Public Sub SendMsg()
UserForm1.Show vbModeless
Call Pause(0.5) '500 Millisekunden
Unload UserForm1
End Sub
'Pause in Sekunden ( 1s = 1, 100ms = 0.1, 500ms = 0.5, 10ms = 0.01...)
Public Sub Pause(ByVal Sekunden As Double)
Dim StopTime As Double
StopTime = Date + ((Timer + Sekunden) / 86400)
Do While StopTime >= (Date + Timer / 86400)
DoEvents
Loop
End Sub
Gruß Dieter
[edit] Divisor (400) durch regulären Divisor (86400) ersetzt [/edit]
Hallo Evinben!
Füge diesen Code in die UserForm ein:
Und diesen Code in ein Modul und starte die Sub Test:
Gruß Dieter
[edit] Divisor (400) durch regulären Divisor (86400) ersetzt [/edit]
Füge diesen Code in die UserForm ein:
Public Sub SendMsg(ByVal strText As String)
Label1.Caption = strText
Show vbModeless
End Sub
Und diesen Code in ein Modul und starte die Sub Test:
Sub Test()
UserForm1.SendMsg "Mein Text"
Call Pause(0.5)
Unload UserForm1
End Sub
'Pause in Sekunden ( 1s = 1, 100ms = 0.1, 500ms = 0.5, 10ms = 0.01...)
Public Sub Pause(ByVal Sekunden As Double)
Dim StopTime As Double
StopTime = Date + ((Timer + Sekunden) / 86400)
Do While StopTime >= (Date + Timer / 86400)
DoEvents
Loop
End Sub
Gruß Dieter
[edit] Divisor (400) durch regulären Divisor (86400) ersetzt [/edit]
das kommt vom Copy 'n Paste Syndrom .
Heißt deine Form wirklich UserForm1 ?
Ich würde hier kein Code posten und Dinge behaupten die ich nicht vorher schon mal ausprobiert habe. Deshalb liegt der Fehler eindeutig bei Dir, Sorry.
Mehr als helfen kann ich hier nicht. Und wir haben hier schon sehr viel Geduld aufgebracht.
Heißt deine Form wirklich UserForm1 ?
Ich würde hier kein Code posten und Dinge behaupten die ich nicht vorher schon mal ausprobiert habe. Deshalb liegt der Fehler eindeutig bei Dir, Sorry.
Mehr als helfen kann ich hier nicht. Und wir haben hier schon sehr viel Geduld aufgebracht.
OK, zurück zum wesentlichen.
Dieters Code hier funktioniert einwandfrei unter Outlook 2007:
siehe dieses DEMO-Video.
Poste uns mal mehr aus deinem Projekt-Code damit wir der Ursache auf den Grund gehen können. Vielleicht hat sich da ein nicht sichtbares Sonderzeichen eingeschlichen, das den Fehler verursacht.
Und diesen Code in ein Modul und starte die Sub Test:
Grüße Uwe
Dieters Code hier funktioniert einwandfrei unter Outlook 2007:
siehe dieses DEMO-Video.
Poste uns mal mehr aus deinem Projekt-Code damit wir der Ursache auf den Grund gehen können. Vielleicht hat sich da ein nicht sichtbares Sonderzeichen eingeschlichen, das den Fehler verursacht.
Zitat von @76109:
Hallo Evinben!
Füge diesen Code in die UserForm ein:
Hallo Evinben!
Füge diesen Code in die UserForm ein:
Public Sub SendMsg(ByVal strText As String)
Label1.Caption = strText
Show vbModeless
End Sub
Und diesen Code in ein Modul und starte die Sub Test:
Sub Test()
UserForm1.SendMsg "Mein Text"
Call Pause(0.5)
Unload UserForm1
End Sub
'Pause in Sekunden ( 1s = 1, 100ms = 0.1, 500ms = 0.5, 10ms = 0.01...)
Public Sub Pause(ByVal Sekunden As Double)
Dim StopTime As Double
StopTime = Date + ((Timer + Sekunden) / 400)
Do While StopTime >= (Date + Timer / 400)
DoEvents
Loop
End Sub
Gruß Dieter
Grüße Uwe
Kurios..
Irgendwie wird das Objekt der UserForm1 nicht erzeugt. Das sollte normalerweise automatisch geschehen. Du kannst es aber auch manuell neu erzeugen in dem du die
probier das mal bei dir
Irgendwie wird das Objekt der UserForm1 nicht erzeugt. Das sollte normalerweise automatisch geschehen. Du kannst es aber auch manuell neu erzeugen in dem du die
Sub Test()
folgendermaßen abänderst:Sub Test()
Dim newForm As New UserForm1
newForm.SendMsg "Mein Text"
Call Pause(0.5)
Unload newForm
End Sub
Hallo zusammen!
Hat sich ja einiges getan
@colinardo
Danke für's einspringen
@evinben
Leider fällt mir zu Deinem Problem nix ein, zumal es bei mir auch problemlos läuft. Enthält die UserForm auch ein Textfeld mit dem Namen 'Label1' ?
Wenn nicht, dann kommt der beschriebene Fehler nämlich auch...
Gruß Dieter
Hat sich ja einiges getan
@colinardo
Danke für's einspringen
@evinben
Leider fällt mir zu Deinem Problem nix ein, zumal es bei mir auch problemlos läuft. Enthält die UserForm auch ein Textfeld mit dem Namen 'Label1' ?
Wenn nicht, dann kommt der beschriebene Fehler nämlich auch...
Gruß Dieter
nein, die Notwendigkeit war mir nicht bekannt.
Das war der Hinweis den wir brauchten .....Zu deinem letzten Fehler:
Es sollte hierbei natürlich ein Bezeichnungsfeld-Objekt(das mit dem großen A in der Werkzeugkiste) sein und kein Textfeld wenn du die Eigenschaft Caption verwendest. Ansonsten nimmst du bei einem Textfeld die Value Eigenschaft.
Hallo!
@evinben
Der war gut
Gruß Dieter
Es sollte hierbei natürlich ein Bezeichnungsfeld-Objekt(das mit dem großen A in der Werkzeugkiste) sein und kein Textfeld wenn du die Eigenschaft Caption verwendest. Ansonsten nimmst du bei einem Textfeld die Value Eigenschaft.
Sorry, hatte ich eigentlich auch so gemeint, aber fälschlicherweise das Textfeld als Gegenstück der TextBox interpretiert@evinben
Enthält die UserForm auch ein Textfeld mit dem Namen 'Label1' ?
nein, die Notwendigkeit war mir nicht bekannt.Warum sollte es sich in meinem Falle um ein Label-Objekt handeln? Und wie erstelle ich so ein Label-Objekt (der Textfeld wird in der Werkzeugsammlung als "Textfeld" bezeichnet und so habe ich ihn finden können). Kann es sein dass du mit diesem Label-Objekt in der deutschen Lokalisierung den "Bezeichnungsfeld" meinst?
Das Textfeld alias TextBox ist ein Text-Eingabefeld, dass Du ja nicht benötigst, da Du ja nur Text anzeigen lassen willst, insofern reicht ein Bezeichnungsfeld (großes A-Symbol). Hatte es im letzten Kommentar nur verwechselt und colinardo hat es ja inzwischen richtig gestellt...Gruß Dieter
Zitat von @evinben:
Etwas verstehe ich allerdings noch nicht. Du schreibst:
> Es sollte hierbei natürlich ein Label-Objekt sein und kein Textfeld wenn du die Eigenschaft Caption verwendest.
Warum sollte es sich in meinem Falle um ein Label-Objekt handeln? Und wie erstelle ich so ein Label-Objekt (der Textfeld wird in
der Werkzeugsammlung als "Textfeld" bezeichnet und so habe ich ihn finden können). Kann es sein dass du mit diesem
Label-Objekt in der deutschen Lokalisierung den "Bezeichnungsfeld" meinst?
Genau das meinte ich, hatte es auch danach noch korrigiert.Etwas verstehe ich allerdings noch nicht. Du schreibst:
> Es sollte hierbei natürlich ein Label-Objekt sein und kein Textfeld wenn du die Eigenschaft Caption verwendest.
Warum sollte es sich in meinem Falle um ein Label-Objekt handeln? Und wie erstelle ich so ein Label-Objekt (der Textfeld wird in
der Werkzeugsammlung als "Textfeld" bezeichnet und so habe ich ihn finden können). Kann es sein dass du mit diesem
Label-Objekt in der deutschen Lokalisierung den "Bezeichnungsfeld" meinst?
PS: Der andere Rechner wird bald fertig und erst danach hätte ich Möglichkeit den TeamViewer zu starten, falls es
überhaupt noch nötig wäre...
ist ja nicht mehr nötig...überhaupt noch nötig wäre...
Dann können wir das ja hier abschließen .
Viel Erfolg weiterhin ..
Grüße Uwe