将VBA API更新为64位Excel 2013

时间:2015-05-30 09:59:38

标签: vba excel-vba excel

这是一个快捷方式API,允许您直接访问Excel中的名称框。由于我已经改为64位版本,我无法使其工作。显示的错误是类型不匹配。

Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function FindWindowEx Lib "USER32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Public Declare PtrSafe Function SendMessageA Lib "USER32" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr

Private Sub NameBox_Shortcut()

Dim hWnd As LongLong

Const NUL = vbNullString
Const EXCEL_WINDOW = "XLMAIN"
Const FORMULABAR_LEFT_HALF = "EXCEL;"
Const NAMEBOX = "COMBOBOX"
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202

hWnd = FindWindowEx(FindWindowEx(FindWindow(EXCEL_WINDOW, NUL), 0, FORMULABAR_LEFT_HALF, NUL), 0, NAMEBOX, NUL)
SendMessageA hwnd, WM_LBUTTONDOWN, 0&, 0&
SendMessageA hwnd, WM_LBUTTONUP, 0&, 0&

End Sub

编辑:更新了代码。

1 个答案:

答案 0 :(得分:1)

声明你的变量,因为longptr将解决你的问题:

Dim hWnd As LongPtr