添加新工作簿后用户窗体总是在最前面 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 事件。