First Published 30 Jan 2023 Last Updated 31 July 2024
This article was triggered by a question at AccessForums.net: Clear the immediate window in VBA
There is no built-in menu item or VBA command to do this. However, various methods do exist
1. Use SendKeys
This is the simplest method. However, most developers avoid the use of SendKeys as working code can break with version updates
VBA.Interaction.SendKeys "^g ^a {DEL}"
Or just
SendKeys "^g ^a {DEL}"
2. Loop through and clear manually
The immediate window holds a maximum of 200 lines of text so loop through and replace each line with an empty string
Sub ClearImmediate()
Dim i As Integer
For i = 0 To 200
Debug.Print ""
Next i
End Sub
NOTE: This leaves the cursor 200 lines down in the immediate window
3. Use VBA code
Adapted from code by ProfoundlyOblivious which I found at
Use VBA to Clear Immediate Window?
Copy this to a standard module
Option Compare Database
Option Explicit
#If VBA7 Then
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)
#Else Then
Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowExA Lib "user32" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function PostMessageA Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#End If
Private Const WM_ACTIVATE As Long = &H6
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_CONTROL = &H11
'=========================================
Public Sub ClearImmediateWindow()
'requires the reference VBA Extensibility
#If VBA7 Then
Dim hwndVBE As LongPtr
Dim hwndImmediate As LongPtr
#Else
Dim hwndVBE As Long
Dim hwndImmediate As Long
#End If
Dim vbWin As VBIDE.Window
Dim strCaption As String
'get the caption for the Immediate window
For Each vbWin In Application.VBE.Windows
If vbWin.type = vbext_wt_Immediate Then
strCaption = vbWin.Caption 'e.g. Immediate in English, Direct in Dutch(etc)
End If
Next
hwndVBE = FindWindowA("wndclass_desked_gsk", vbNullString)
hwndImmediate = FindWindowExA(hwndVBE, ByVal 0&, "VbaWindow", strCaption)
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
4. Use an Access VBE add-in
Some Access utilities include this functionality. For example:
a) IDBE Tools 2010 (free)
b) MZ Tools (commercial)
b) VBE_Extras (commercial)
5. Feedback
Please use the contact form below to let me know whether you found this article interesting/useful or if you have any questions/comments.
Please also consider making a donation towards the costs of maintaining this website. Thank you
Colin Riddington Mendip Data Systems Last Updated 31 July 2024
Return to Code Samples Page
|
Return to Top
|