kikimiki
Goto Top

Fenster per vbs ansprechen mit variablem Namen

Hallo,

gibt es einen vbs-Befehl mit dem ich ein vorhandenes Fenster aktivieren kann?
Der Name des Fensters lautet:

Bericht vom 23.10.2009

Wobei immer das aktuelle Datum drinsteht:

So sieht der Code aus:

oOMail.Subject = "Automatisierter ITK-Report vom " & Date  

Content-ID: 127788

Url: https://administrator.de/contentid/127788

Ausgedruckt am: 15.11.2024 um 05:11 Uhr

bennib22
bennib22 23.10.2009 um 12:41:48 Uhr
Goto Top
Hi,
Ich hab zwar kaum Ahnung von vbs aber probier mal
...Date.now
KikiMiki
KikiMiki 23.10.2009 um 12:43:57 Uhr
Goto Top
Die Datefunktion klappt ja

Es geht nur darum das Fenster über den Namen anzusprechen
Und wie mache ich das mit einem sich täglich ändernden Datum?
bennib22
bennib22 23.10.2009 um 13:42:03 Uhr
Goto Top
Das aktuelle Datum wird durch ".Now" angezeigt.
bin mir aber nicht sicher ob das klappt!!
wenn nicht hab ich auch keine Ahnung.

Gruß
bennib22
AndreasHoster
AndreasHoster 23.10.2009 um 14:03:12 Uhr
Goto Top
Ich vermute mal, mit "aktivieren" meinst Du, dem Fenster den Focus zu geben.
In dem Fall:
Set o = CreateObject("Wscript.Shell")  
o.AppActivate(NameDesFensters)
76109
76109 23.10.2009 um 14:04:13 Uhr
Goto Top
Hallo KikiMiki!

Versuchs mal mit:
oOMail.Subject = "Automatisierter ITK-Report vom " & Date  
oOMail.Display

Gruß Dieter
KikiMiki
KikiMiki 23.10.2009 um 14:07:45 Uhr
Goto Top
So wollte ich es lösen:

Set WshShell = WScript.CreateObject("WScript.Shell")  
WScript.Sleep 1500
WshShell.AppActivate oOMail
WScript.Sleep 1500
oOMail.display ' Fenster anzeigen  

WScript.Sleep 1500
WshShell.SendKeys("%s") ' Sende ein "Alt-S". Outlook denkt der User "sendet  

Aber wenn das Skript läuft klappt der Wchsel auf das Outlook Fenster nicht jedes mal
Keine Ahnung wieso
76109
76109 23.10.2009 um 14:13:57 Uhr
Goto Top
Hallo KikiMiki!

Vielleicht hilft Dir dieses funktionierende Beispiel weiter?
    Dim appMail 
    
    Set appMail = CreateObject("Outlook.Application").CreateItem(0)  

    With appMail
        .Subject = "Bestellung " & Now  
        .To = "Max.Mustermann@test.uk"  
        .cc = "Max.Mustermann@test.uk"  
        '.HTMLbody = HtmlText  
        '.body = Text  
        .Display
    End With
    Set appMail = Nothing

Gruß Dieter
KikiMiki
KikiMiki 23.10.2009 um 14:20:52 Uhr
Goto Top
Hi didi,

seh da keinen großen Unterschied ;)

Hier meine Funktion

Dim oOApp
Dim oOMail
Dim WshShell

Set oOApp = CreateObject("Outlook.Application")  
Set oOMail = oOApp.CreateItem(olMailItem)

oOMail.display ' Fenster anzeigen  
oOMail.To = "me@me.de"  
oOMail.CC = ""  
oOMail.Subject = "Automatisierter Report vom " & Date  
oOMail.Body = "Im Anhang befindet sich der Report"."  
oOMail.Attachments.Add (SkriptPfad & "Bericht.xls"), olByValue, 1  



Set WshShell = WScript.CreateObject("WScript.Shell")  
WScript.Sleep 1500
WshShell.AppActivate oOMail
WScript.Sleep 1500
oOMail.display ' Fenster anzeigen  
WScript.Sleep 1500
WshShell.SendKeys("%s") ' Sende ein "Alt-S". Outlook denkt der User "sendet  
76109
76109 23.10.2009 um 14:44:29 Uhr
Goto Top
Hallo KikiMiki!

Ich sehe da schon einen Unterschied. Die Zeile 8 sollte wohl erst in Zeile 14 stehen und der Rest ganz entfallenface-wink

Gruß Dieter
AndreasHoster
AndreasHoster 23.10.2009 um 14:59:38 Uhr
Goto Top
SendKeys ist des Teufels. Sollte man NIE NIE NIE verwenden, es sei denn es geht gar nicht anders und im Normalfall gehts anders.

Ich finde, es ist unlogisch codiert:
Erst Fenster aktivieren, dann den Display Befehl? Finde ich komisch, muß aber auch glücklicherweise kein Outlook verwenden.

Außerdem gibt es viele Gründe, warum SendKeys unzuverlässig ist:
Unter Last reichen eventuell die 1,5 Sekunden nicht aus, daß das Fenster schon aufgebaut und im Focus ist wenn der SendKey Befehl kommt: Eingabe geht ins Leere bzw. falsche Programm
Eventuell drängt sich in den 1,5 Sekunden ein anderes Popup/Programm in den Vordergrund: Eingabe geht ins Leere bzw. falsche Programm
Eine systemmodale Dialogbox ist offen: Eingabe geht ins Leere bzw. falsche Programm

Sendkeys auf einem Multitaskingsystem mit mehreren Programmen ist wie Roulettespielen: Man kann das richtige Programm erwischen, aber zuverlässig ist was anderes.
KikiMiki
KikiMiki 23.10.2009 um 15:05:42 Uhr
Goto Top
Habs umgestellt

Klappt leider immer noch nicht
Er will mir einfach das Outlookfenster nicht vor holen....


Dim oOApp
Dim oOMail
Dim WshShell

Set oOApp = CreateObject("Outlook.Application")
Set oOMail = oOApp.CreateItem(olMailItem)


oOMail.To = "me@me.de
oOMail.CC = "he@he.de"
oOMail.Subject = "Automatisierter Report vom " & Date
oOMail.Body = "Im Anhang befindet sich der Report."
oOMail.Attachments.Add (SkriptPfad & Report.xls"), olByValue, 1
oOMail.display ' Fenster anzeigen

Set WshShell = WScript.CreateObject("WScript.Shell")

WScript.Sleep 1500

WshShell.SendKeys("%s") ' Sende ein "Alt-S". Outlook denkt der User "sendet
KikiMiki
KikiMiki 23.10.2009 um 15:07:16 Uhr
Goto Top
Hallo Adreas,

hast du eine andere Idee?
Wenn ich es nicht über sendkey mache bringt outlook eine Sicherheitswarnung wo ich jedes mal "ja" drücken muss zum zulassen


Habs umgestellt

Klappt leider immer noch nicht
Er will mir einfach das Outlookfenster nicht vor holen....


Dim oOApp
Dim oOMail
Dim WshShell

Set oOApp = CreateObject("Outlook.Application")  
Set oOMail = oOApp.CreateItem(olMailItem)


oOMail.To = "me@me.de  
oOMail.CC = "he@he.de"  
oOMail.Subject = "Automatisierter Report vom " & Date  
oOMail.Body = "Im Anhang befindet sich der Report."  
oOMail.Attachments.Add (SkriptPfad & Report.xls"), olByValue, 1  
oOMail.display ' Fenster anzeigen  

Set WshShell = WScript.CreateObject("WScript.Shell")   

WScript.Sleep 1500 

WshShell.SendKeys("%s") ' Sende ein "Alt-S". Outlook denkt der User "sendet  
76109
76109 23.10.2009 um 15:24:52 Uhr
Goto Top
Hallo KikiMiki!

Also, ich hab's mit meinem und Deinem Code getestet und funktioniert mit beiden Codes einwandfrei?

Bei Dir fehlen "-Zeichen, fehlen die im Script auch?

Gruß Dieter
KikiMiki
KikiMiki 23.10.2009 um 15:30:24 Uhr
Goto Top
Zeichen sind vollständig ;)
76109
76109 23.10.2009 um 15:33:33 Uhr
Goto Top
Hallo AndreasHoster!

Die Display-Anweisung ist doch die Fensteraktivierung. Mail mit Daten initialisieren und dann erst anzeigen.

Ich verwende auch kein Outlook, aber zum testen reicht Outlook-Express.

Gruß Dieter
76109
76109 23.10.2009 um 15:37:27 Uhr
Goto Top
Hallo KikiMiki!

In diesem Quelltext fehlen die Zeichen auch:

hier: oOMail.To = "me@me.de > = "me@me.de"
hier: oOMail.Attachments.Add (SkriptPfad & Report.xls"), olByValue, 1 > = & "Report.xls"

Gruß Dieter
KikiMiki
KikiMiki 23.10.2009 um 15:43:04 Uhr
Goto Top
@ Didi
Zeichen sind alle da
War nur copy-paste Fehler.....
;)

Es geht ja alles, nur Send-key nicht ;)
76109
76109 23.10.2009 um 15:48:18 Uhr
Goto Top
Hallo KikiMiki!

Achso, stehe ich irgenwie auf der Leitung? Das anzeigen geht nur das senden nicht?

Gruß Dieter
76109
76109 24.10.2009 um 09:45:00 Uhr
Goto Top
Hallo KikiMiki!

Wieso verwendest Du anstelle von SendKey Alt+S nicht einfach die Anweisung Send mit oder ohne Display?
.Display
.Send

Gruß Dieter
KikiMiki
KikiMiki 26.10.2009 um 11:10:41 Uhr
Goto Top
Hallo Didi,

wie meinst du das?
76109
76109 26.10.2009 um 11:55:53 Uhr
Goto Top
Hallo KikiMiki!

Mhm, wie ich das meine, sieht man doch eigentlich am letzten Codeface-smile

Also, mit der Anweisung Display, wird ja Dein Mail-Fenster angezeigt und dann könntest im Fenster Deine Mail senden. Mit der zusätzlichen Send-Anweisung, wird Dein Mail-Fenster auch angezeigt und der Sendbefehl ist auch schon aktiviert. Wenn Du die Display-Anweisung weg läßt und nur die Send-Anweisung drinnen läßt, dann wird keine Mail angezeigt und nur der Sendbefehl aktiviert. Allerdings kann ich nur mit Outlook-Express testen und da muss dann nach Ablauf einer bestimmten Zeit (paar Sekunden), nochmal zusätzlich das Absenden mit Ja/Nein bestätigt werden? Keine Ahnung, wie das in Outlook gehandhabt wird? Und ob das gegebenenfalls per Einstellungen unterbunden werden kann?

Gruß Dieter