Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
640to644
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
640to644
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehlerfenster ermitteln???

Fehlerfenster ermitteln?
22.07.2005 08:46:00
Sylvio
Hallo Forum,
ich hab von Excel aus automatisch eine mail generiert und die verschickt.
Nun kann es aber sein das die mail gar nicht zu verschicken geht.
Es kommt ein Fehlerfenster von Outlook. Und nun meine Frage wie kann ich dieses Fenster automtisch erfassen und schließen?
Ich hab im Netz ein Beispiel gefunden für IE-Fenster schließen
der Code geht aber schon bei Zeile
CurHWnd = GetWindow(hwnd, GW_HWNDFIRST)
nicht.
CurHwnd bleibt immer 0 obwohl andere Windowsfenster offen sind.
Was ist falsch dran geht das vba technisch aus excel überhaupt so?
Option Explicit
' zunächst die benötigten API-Deklarationen
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" _
Alias "GetClassNameA" (ByVal hwnd As Long, _
ByVal lpClassName As String, ByVal nMaxCount As Long) _
As Long
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
Const LNULL = 0&
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Beim Klick auf die Schaltfläche sollen alle IE-Fenster geschlossen werden:

Private Sub Command1_Click()
' alle offenen IE-Fenster schließen
Dim lRetVal As Long
Dim sClassName As String
Dim CurHWnd As Long
CurHWnd = GetWindow(hwnd, GW_HWNDFIRST)
Do While CurHWnd not 0
' Klassennamen ermitteln
sClassName = String$(256, " ")
lRetVal = GetClassName(CurHWnd, sClassName, 255)
sClassName = Left$(sClassName, InStr(sClassName, _
Chr$(0)) - 1)
If sClassName = "IEFrame" Then
' Explorer-Fenster gefunden - jetzt schließen
lRetVal = SendMessage(CurHWnd, WM_SYSCOMMAND, _
SC_CLOSE, LNULL)
End If
' Handle des nächsten Fensters
' 0, wenn kein weiteres Fenster vorhanden
CurHWnd = GetWindow(CurHWnd, GW_HWNDNEXT)
Loop
End Sub

Danke schon mal Gruß Sylvio

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlerfenster ermitteln?
22.07.2005 10:04:30
Nepumuk
Hi,
&gt&gtEs kommt ein Fehlerfenster von Outlook. &lt&lt
Meinst du: "Eine andere Anwendung versucht ......"
Wo du auf JA klicken musst, um die Mail zuzulassen?
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Fehlerfenster ermitteln?
22.07.2005 10:47:54
Sylvio
Hey Nepumuk,
ich sende aus excel über aufruf von outlook als objekt eine mail das funzt, jetzt kann es aber sein wenn du zum beispiel nicht mit dem netz verbunden bist oder wenn deine kontoeinstellung falsch ist, dass ein fenster von outlook aus sich öffnet "kann mail nicht senden fehler sowieso"
Hab leider kein foto davon.
ich möchte dieses fenster nun abfangen und schließen und ich dachte das geht wie mit dem Code den ich im netz gefunden für IE habe, nur leider weiß ich nicht wie ich das ding genau umschreiben muss damit
CurHWnd = GetWindow(hwnd, GW_HWNDFIRST) das hwnd immer null ist obwohl fenster offen sind
und ich weiß den namen für outlook nicht sClassName = "IEFrame" statt IE halt Outlook
Anzeige
AW: Fehlerfenster ermitteln?
22.07.2005 11:10:05
Nepumuk
Hi,
die Dialogfenster in Office haben einen einheitlichen Klassennamen:
FindWindow("#32770", vbNullString)
Das Fenster kannst du z.B. mit PostMessage schließen.
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Fehlerfenster ermitteln?
22.07.2005 11:21:08
Sylvio
Hey
das funzt schon besser das problem ist wie kann ich nun das genaue fenster ermitteln da ich excel word und outlook offen habe?
Gruß Sylvio
AW: Fehlerfenster ermitteln?
22.07.2005 12:12:00
Nepumuk
Hi,
indem du den Fenstertitel ausliest:
Option Explicit

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
    ByVal hwnd As Long, _
    ByVal wIndx As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" ( _
    ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
    ByVal hwnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
    ByVal hwnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long

Private Const GW_HWNDFIRST = 0&
Private Const GW_HWNDNEXT = 2&
Private Const GWL_STYLE = -16&
Private Const WS_VISIBLE = &H10000000
Private Const WS_BORDER = &H800000

Public Sub GetWindowList()
    Dim hwnd As Long, sTitle As String, lStyle As Long
    Dim lpClassName As String, lReturn As Long
    lpClassName = Space(256)
    hwnd = GetWindow(FindWindow(vbNullString, vbNullString), GW_HWNDFIRST)
    Do
        lStyle = GetWindowLong(hwnd, GWL_STYLE) And (WS_VISIBLE Or WS_BORDER)
        sTitle = GetWindowTitle(hwnd)
        If lStyle = (WS_VISIBLE Or WS_BORDER) And Trim$(sTitle) <> "" Then
            lReturn = GetClassName(hwnd, lpClassName, 256)
            Debug.Print Left$(lpClassName, lReturn) & " / " & sTitle
        End If
        hwnd = GetWindow(hwnd, GW_HWNDNEXT)
    Loop Until hwnd = 0
End Sub

Private Function GetWindowTitle(ByVal hwnd As Long) As String
    Dim lResult As Long, sTemp As String
    lResult = GetWindowTextLength(hwnd) + 1
    sTemp = Space(lResult)
    lResult = GetWindowText(hwnd, sTemp, lResult)
    GetWindowTitle = Left(sTemp, Len(sTemp) - 1)
End Function

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: Fehlerfenster ermitteln?
22.07.2005 13:43:25
Sylvio
Werde es mal ausprobieren!
Danke erstmal gruß sylvio
AW: Fehlerfenster ermitteln?
22.07.2005 10:52:58
Sylvio
Das was Du sicher meinst hab icxh schon gelöst
Set Outapp = CreateObject("Outlook.Application")
Set Newmail = Outapp.CreateItem(0)

With Newmail
.To = "xy@xy.com" 'Adresse
.Subject = "text" 'Betreffzeile
.Body = "Sendetext" 'Sendetext
'.Send 'Hier wird die Mail gleich in den Postausgang gelegt und die Sicherheitsabfrage muss jedesmall bestätigt werden

.Display 'Anzeigen der mail
SendKeys "%s", True 'Hier wird die Mail "angezeigt" aber gleich versendet,... OHNE Sicherheitsabrage

End With
'Variablen zurücksetzen notwendig

Set Newmail = Nothing 'OutApp.CreateItem(0)
Gruß Sylvio
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige