Use VBA to Clear Immediate Window?

前端 未结 16 1244
刺人心
刺人心 2021-01-30 00:19

Does anyone know how to clear the immediate window using VBA?

While I can always clear it myself manually, I am curious if there is a way to do this programmatically.

16条回答
  •  执笔经年
    2021-01-30 00:47

    • No SendKeys?
    • No VBA Extensibility?
    • No 3rd Party Executables?
    • No problem!

    A Windows API Solution

    Option Explicit
    
    Private Declare PtrSafe _
                Function FindWindowA Lib "user32" ( _
                                ByVal lpClassName As String, _
                                ByVal lpWindowName As String _
                                ) As LongPtr
    Private Declare PtrSafe _
                Function FindWindowExA Lib "user32" ( _
                                ByVal hWnd1 As LongPtr, _
                                ByVal hWnd2 As LongPtr, _
                                ByVal lpsz1 As String, _
                                ByVal lpsz2 As String _
                                ) As LongPtr
    Private Declare PtrSafe _
                Function PostMessageA Lib "user32" ( _
                                ByVal hwnd As LongPtr, _
                                ByVal wMsg As Long, _
                                ByVal wParam As LongPtr, _
                                ByVal lParam As LongPtr _
                                ) As Long
    Private Declare PtrSafe _
                Sub keybd_event Lib "user32" ( _
                                ByVal bVk As Byte, _
                                ByVal bScan As Byte, _
                                ByVal dwFlags As Long, _
                                ByVal dwExtraInfo As LongPtr)
    
    Private Const WM_ACTIVATE As Long = &H6
    Private Const KEYEVENTF_KEYUP = &H2
    Private Const VK_CONTROL = &H11
    
    Sub ClearImmediateWindow()
    
        Dim hwndVBE As LongPtr
        Dim hwndImmediate As LongPtr
        
        hwndVBE = FindWindowA("wndclass_desked_gsk", vbNullString)
        hwndImmediate = FindWindowExA(hwndVBE, ByVal 0&, "VbaWindow", "Immediate")
        PostMessageA hwndImmediate, WM_ACTIVATE, 1, 0&
        
        keybd_event VK_CONTROL, 0, 0, 0
        keybd_event vbKeyA, 0, 0, 0
        keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
        
        keybd_event vbKeyDelete, 0, 0, 0
        keybd_event vbKeyDelete, 0, KEYEVENTF_KEYUP, 0
        
    End Sub
    

提交回复
热议问题