添加新工作簿后用户窗体总是在最前面 excel vba
userform always ontop after add new workbook excel vba
我有一个用户表单,上面有一个命令按钮,这个按钮用于创建一个新的工作簿。单击按钮后,我希望此用户表单位于新创建的工作簿之上。有什么想法吗?(对于 excel 2007,用户窗体始终位于顶部,但对于 excel 2016)
Private Sub CommandButton1_Click()
Workbooks.Add
End Sub
尝试将以下代码片段放在用户表单代码模块的顶部。
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal clsName As String, ByVal wndName As String) As Long
Private Declare PtrSafe Function SetParent Lib "user32" (ByVal hChild As Long, ByVal hParent As Long) As Long
Private Sub CommandButton1_Click()
Static h As Long
If h <= 0 Then h = FindWindow("ThunderDFrame", Me.Caption)
If h <= 0 Then Exit Sub
Dim wb As Workbook: Set wb = Workbooks.Add
SetParent h, Application.Windows(wb.Name).hwnd
wb.Activate
End Sub
这将使新工作簿成为用户表单的 Parent
。这意味着当您关闭新工作簿时表单将卸载。如果您的目标是让表单在任何工作簿或工作表处于活动状态时保持活动状态,则可以使用其他一些技术,也许最简单的方法是处理 Workbook_SheetActivate
事件。
我有一个用户表单,上面有一个命令按钮,这个按钮用于创建一个新的工作簿。单击按钮后,我希望此用户表单位于新创建的工作簿之上。有什么想法吗?(对于 excel 2007,用户窗体始终位于顶部,但对于 excel 2016)
Private Sub CommandButton1_Click()
Workbooks.Add
End Sub
尝试将以下代码片段放在用户表单代码模块的顶部。
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal clsName As String, ByVal wndName As String) As Long
Private Declare PtrSafe Function SetParent Lib "user32" (ByVal hChild As Long, ByVal hParent As Long) As Long
Private Sub CommandButton1_Click()
Static h As Long
If h <= 0 Then h = FindWindow("ThunderDFrame", Me.Caption)
If h <= 0 Then Exit Sub
Dim wb As Workbook: Set wb = Workbooks.Add
SetParent h, Application.Windows(wb.Name).hwnd
wb.Activate
End Sub
这将使新工作簿成为用户表单的 Parent
。这意味着当您关闭新工作簿时表单将卸载。如果您的目标是让表单在任何工作簿或工作表处于活动状态时保持活动状态,则可以使用其他一些技术,也许最简单的方法是处理 Workbook_SheetActivate
事件。