Em mais uma das solicitações de nosso fórum, veio a necessidade de fazer com que a janela do Microsoft Excel ganhasse foco quando uma macro fosse executada.
Normalmente, isso é feito quando a rotina que dá o foco roda sob um determinado evento externo, como o tempo, já que é um dos únicos casos em que a aplicação VBA não estará em uso e precisará ganhar o foco. Para tal necessidade, o pessoal da Ozgrid (sempre eles) disponibilizou uma macro que realiza o procedimento. Ela faz o uso de API, como já deveria ser esperado por uma função não nativa do Excel.
Option Explicit 'Windows API Declarations, variables Declare Function alias_ShowWindow Lib "User32" Alias "ShowWindow" _ (ByVal hWnd As Integer, ByVal nCmdShow As Integer) As Integer Declare Function alias_FindWindow Lib "User32" Alias "FindWindowA" _ (ByVal lpclassname As String, ByVal lpCaption As Any) As Integer Declare Function alias_SetActiveWindow Lib "User32" Alias "SetActiveWindow" _ (ByVal hWnd As Integer) As Integer 'Window handler function Function AppActivateClass(lpclassname$) Dim hWnd As Integer 'the application's window handle Dim dummy As Integer 'Dummy variable 'Get the Window Handle hWnd = alias_FindWindow(lpclassname$, 0&) 'Activate the Application dummy = alias_SetActiveWindow(hWnd) 'First close the window dummy = alias_ShowWindow(hWnd, 2) 'Then activate the window dummy = alias_ShowWindow(hWnd, 9) 'Return True if Application Running, or False if not. AppActivateClass = hWnd End Function 'Code to activate the function above Sub ActivateXLS() x = AppActivateClass("XLMain") End Sub |
O código é exatamente como o original, mas gera um erro. Ao chamar a função ActivateXLS, o sistema dá como variável não declarada, já que o Option Explicit está ativado na primeira linha. Basta excluir a linha ou retirar o “x = ” antes da chamada. Voilá!
Referência
http://www.ozgrid.com/forum/showthread.php?t=45148&page=1