Code plakken op forums

Afrondende opmerkingen

In deel 1 en deel 2 van dit artikel zagen we hoe we andere Windows applicaties kunnen benaderen en de focus geven. Hier zou ik willen afronden met een aantal algemene opmerkingen.

Om bijvoorbeeld naar een niet-opgeslagen tekstbestand in Notepad te springen, volstaat:

AppActivate fWindowText("Untitled - Notepad", "Notepad")
waarbij je de functie op de vorige pagina mee kopieert in het VBA project.

Chip Pearson heeft een mooi alternatief voor de functie AppActivate, die in zijn ogen niet altijd betrouwbaar is. Zie op deze pagina. Hier gaat het om het activeren van Excel, maar niets belet ons dit toe te passen op bvb. Notepad (eigen adaptatie van de code):

Private Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetFocus Lib "user32" (ByVal HWnd As Long) As Long

Public Sub ActivateNotepad()

    Dim XLHWnd As Long

    XLHWnd = FindWindow("Notepad", vbNullString)

    If XLHWnd Then
        If BringWindowToTop(XLHWnd) Then SetFocus XLHWnd
    End If

End Sub

Nadeel van deze code is dat je ze niet kan uitvoeren vanuit VBA, wel vanuit Excel ( Alt + F8 o.a.). Bekijk ook deze topic op MrExcel als je geïnteresseerd bent.

De versie van mijn code volgens Chip Pearson is als volgt (ik gebruik ze zelf):

' Wim Gielis ' http://www.wimgielis.com
''''' ' VBA-code to copy VBA-code in a module to the Clipboard, and activate a Firefox window ' 11/08/11 '''''
Option Compare Text Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) 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 GetWindowText Lib "user32" _ Alias "GetWindowTextA" (ByVal hWnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long Private Declare Function BringWindowToTop Lib "user32" (ByVal HWnd As Long) As Long Private Declare Function SetFocus Lib "user32" (ByVal HWnd As Long) As Long
Sub CopyCodeToForum()
Dim DataObj As New MSForms.DataObject With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule DataObj.SetText "Hi there," & vbCr & vbCr & "Consider:" & vbCr & "[code]" & _ .Lines(1, .CountOfLines) & "[/code]" & vbCr & vbCr & "Wigi" DataObj.PutInClipboard End With Dim XLHWnd As Long XLHWnd = lWindowHandle("MrExcel Message Board - Mozilla Firefox", "MozillaWindowClass") If XLHWnd Then If BringWindowToTop(XLHWnd) Then SetFocus XLHWnd Application.Wait Now + TimeValue("00:00:01") / 100 Application.SendKeys "+{INSERT}", True End If End If
End Sub
Function lWindowHandle(sWindowText As String, Optional sClass As String) As String
Dim hWnd As Long, lRet As Long, sText As String hWnd = FindWindowEx(0, 0, vbNullString, vbNullString) Do While hWnd <> 0 'ClassName sText = String(100, Chr(0)) lRet = GetClassName(hWnd, sText, 100) If Len(sClass) = 0 Or Left(sText, lRet) = sClass Then 'WindowText sText = String(100, Chr(0)) lRet = GetWindowText(hWnd, sText, 100) If InStr(sText, sWindowText) Then lWindowHandle = HWnd Exit Function End If End If hWnd = FindWindowEx(0, hWnd, vbNullString, vbNullString) Loop
End Function

Vervolgens heb ik zeer nuttige code gevonden op deze pagina. In een Excel bestand worden de belangrijkste gegevens van de actieve Windows opgelijst. Zo kan je ondermeer de WindowText en de ClassName van een Window te weten komen. In dit verband ook zeker deze nuttige tool uitproberen: hier zo.

Om Excel te activeren kan je gebruik maken van:

FindWindow("XLMAIN", vbNullString)
of:
FindWindow("XLMAIN", Application.Caption)

De code voor het activeren van het VBE Window, is gewoon Alt + F11 zoals we allemaal horen te weten :-)

Over Wim

Wim Gielis is Business Intelligence consultant en Excel expert

Andere links