使用 VBA 将焦点设置在 Excel 用户表单上
Set Focus on an Excel User Form Using VBA
我的项目已完成 95%,但仍有一个小问题。我的代码,来自用户表单的 运行,打开一个包含第一行的 PDF 文档,在第二行中识别它的 window,并在第三行中移动和调整 window 的大小。
ActiveWorkbook.FollowHyperlink Mail(0) & Mail(Me.Tag)
Wnd = FindWindow(vbNullString, AcrobatWindowID(Mail(Me.Tag)))
SetWindowPos Wnd, HWND_TOP, 1950, 10, 1100, 1300, SWP_NOACTIVATE
在此操作结束时,用户表单变暗。焦点似乎仍然在 PDF 上。这并不重要,因为表格已经完全开发,我可以点击它或 PDF 来激活,就像我想要的那样。
尽管如此,我还是试图将焦点放在窗体上,然后放在特定的控件上。我成功地找到了 Excel window 但未能将焦点设置在窗体上,更不用说控件了。事实上,我不知道如何检查我是否成功将焦点设置在 Excel window 上。我在尝试使用这段代码时不确定其语法。
Public Const SWP_NOMOVE = &H2 ' ignore cx and cy
Public Const SWP_NOSIZE = &H1 ' ignore X and Y
SetWindowPos Wnd, HWND_TOP, 0, 0, 0, 0, (SWP_NOMOVE + SWP_NOSIZE)
无论如何,表格仍然是灰色的。有人对我有什么建议吗?
为了获得表单处理程序,您应该这样进行:
- 使用API
GetActiveWindow
并在表单代码模块顶部(在声明区域)创建一个Private
变量:
Option Explicit
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Private frmHwnd as LongPtr
- 在
UserForm_Initialize
事件中插入下一行代码:
frmHwnd = GetActiveWindow
我的项目已完成 95%,但仍有一个小问题。我的代码,来自用户表单的 运行,打开一个包含第一行的 PDF 文档,在第二行中识别它的 window,并在第三行中移动和调整 window 的大小。
ActiveWorkbook.FollowHyperlink Mail(0) & Mail(Me.Tag)
Wnd = FindWindow(vbNullString, AcrobatWindowID(Mail(Me.Tag)))
SetWindowPos Wnd, HWND_TOP, 1950, 10, 1100, 1300, SWP_NOACTIVATE
在此操作结束时,用户表单变暗。焦点似乎仍然在 PDF 上。这并不重要,因为表格已经完全开发,我可以点击它或 PDF 来激活,就像我想要的那样。
尽管如此,我还是试图将焦点放在窗体上,然后放在特定的控件上。我成功地找到了 Excel window 但未能将焦点设置在窗体上,更不用说控件了。事实上,我不知道如何检查我是否成功将焦点设置在 Excel window 上。我在尝试使用这段代码时不确定其语法。
Public Const SWP_NOMOVE = &H2 ' ignore cx and cy
Public Const SWP_NOSIZE = &H1 ' ignore X and Y
SetWindowPos Wnd, HWND_TOP, 0, 0, 0, 0, (SWP_NOMOVE + SWP_NOSIZE)
无论如何,表格仍然是灰色的。有人对我有什么建议吗?
为了获得表单处理程序,您应该这样进行:
- 使用API
GetActiveWindow
并在表单代码模块顶部(在声明区域)创建一个Private
变量:
Option Explicit
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Private frmHwnd as LongPtr
- 在
UserForm_Initialize
事件中插入下一行代码:
frmHwnd = GetActiveWindow