Olá Ade,
Estou te enviando duas funções que eu uso em meus programas. Você pode adaptá-las no seu. Elas funcionam de modo complemetar. Você deverá usar a segunda (Fecha_Janela), passando o nome da janela. P.Ex.:
Call Fecha_Janela ("Documento1 - Microsoft Word")
Acho que isso pode ajudar.
OBS. Se a janela não existir em memória, o programa não gera erro, de forma que você pode chamá-la diretamente, sem realizar qualquer teste prévio.
Public Const GW_CHILD = 5
Public Const GW_HWNDNEXT = 2
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal aint As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
'*******************************************************
'Esta função localiza uma janela aberta e retorna o seu
'manipulador (Hwnd).
'Se não localizar a Janela, retorna 0.
'********************************************************
Public Function Localiza_Janela(ByVal StrJanela As String) As Long
On Error Resume Next
Dim AntHwnd As Long, Classe As Long, JHwnd As Long, TamNome As Long
Dim NomeClasse As String, NomeJanela As String
NomeClasse = Space$(255)
AntHwnd = GetDesktopWindow()
JHwnd = GetWindow(AntHwnd, GW_CHILD)
Do Until JHwnd = 0
NomeJanela = Space$(255)
TamNome = GetWindowText(JHwnd, NomeJanela, 128)
NomeJanela = Left$(Trim$(NomeJanela), TamNome)
If UCase$(Trim$(NomeJanela)) = UCase$(Trim$(StrJanela)) Then
Exit Do
Else
AntHwnd = JHwnd
JHwnd = GetWindow(AntHwnd, GW_HWNDNEXT)
End If
Loop
Localiza_Janela = JHwnd
If Err Then Err.Clear
End Function
'******************************************************************
'Esta procedure fecha uma janela aberta dentro do Windows.
'A janela pode ser um programa ou uma janela do próprio Windows.
'Esta procedure uma a Função Localiza_Janela deste mesmo módulo.
'
'Parâmetros:
'Janela: Título da janela a ser fechada.
'
'******************************************************************
Public Sub Fecha_Janela(ByVal NomeJanela As String)
On Error Resume Next
Const Fecha = &H10
Dim Resp As Long, JHwnd As Long
JHwnd = Localiza_Janela(NomeJanela)
If JHwnd <> 0 Then
Resp = PostMessage(JHwnd, Fecha, 0&, 0&)
End If
If Err Then Err.Clear
End Sub
um abraço,
Sandro.