#If VBA7 Then
#If Win64 Then
Private Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As LongPtr, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
#Else
Private Declare Function GetForegroundWindow Lib "user32" () 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 PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
#End If
#End If
Public Const WM_IME_KEYDOWN = &H290& 'ボタン押して
Public Const WM_IME_KEYUP = &H291 'ボタン離す
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const VK_ESCAPE = &H1B
Sub 強制セル編集解除()
Dim hWndEdit As LongPtr
Dim className As String * 256
Dim length As Long
hWndEdit = GetForegroundWindow()
length = GetClassName(hWndEdit, className, 256)
If length > 0 Then
'className = Left(className, length)
className = Left(className, 6)
Debug.Print "ClassName:" & className & ":"
'If className = "EXCEL6" Then
'If className = "XLMAIN" Or className = "EXCEL6" Then
' ESCキーを InPlaceEdit に送信
' PostMessage hWndEdit, WM_KEYDOWN, VK_ESCAPE, 0
' PostMessage hWndEdit, WM_KEYUP, VK_ESCAPE, 0
PostMessage hWndEdit, WM_IME_KEYDOWN, VK_ESCAPE, 0
PostMessage hWndEdit, WM_IME_KEYUP, VK_ESCAPE, 0
Sleep 300
DoEvents
'End If
End If
End Sub
これで解決いたしました。
ありがとうございました。