gpt4 book ai didi

excel - 更改加载项用户窗体的父工作簿窗口

转载 作者:行者123 更新时间:2023-12-04 20:26:54 25 4
gpt4 key购买 nike

我已经为这个问题苦苦挣扎了一段时间了。

我有一个从我构建的 Excel 加载项调用的用户窗体,然后测试当前事件工作簿是否包含特定结构。如果没有,它会创建一个具有该精确结构的新工作簿。我设置了这个工作簿以及我打开为 wb1 和 wb2 的另一个工作簿。

问题是在单击功能区按钮时最初从事件工作簿(可以是任何工作簿)调用用户窗体,并且基本上只锁定到那个工作簿。

有什么办法可以将用户表单从该工作簿中分离出来并将其更改为在用户表单的背景中显示我的 wb2?

我已经尝试了以下代码,但它只是关闭了我的用户窗体并且不起作用。

 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

有任何想法吗?

最佳答案

这是我的插件中的代码,用于以一个无模式用户表单显示所有打开的工作簿中的所有工作表并激活(通过 dblcick)选择一个。调用:调用 ShowModeless

Addin 文件中的类 WinActivate

' Class WinActivate
Public WithEvents AppEvents As Application

Private Declare PtrSafe Function SetParent Lib "user32" _
(ByVal hWndChild As LongPtr, ByVal hWndNewParent As LongPtr) As LongPtr

Private Sub AppEvents_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
'Change precedent object of UserForm for new created windows
If Val(Application.Version) >= 15 Then SetParent UserFormHandle, Wn.hWnd
End Sub

插件文件中的 Module1
'Module1 code
Option Explicit

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Dim WA As New WinActivate

Public UserFormHandle As Long

' DajArkusze is my Userform in Addin file
Sub ShowModeless()
Set WA.AppEvents = Application
DajArkusze.Show 0
UserFormHandle = FindWindow("ThunderDFrame", DajArkusze.Caption)
End Sub

关于excel - 更改加载项用户窗体的父工作簿窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58658670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com