我已经为这个问题苦苦挣扎了一段时间了。
我有一个用户窗体,该窗体是从我构建的Excel加载项中调用的,然后可以测试当前活动的工作簿是否包含特定的结构。如果没有,它将创建具有该确切结构的新工作簿。我设置了该工作簿以及我打开的另一个工作簿,分别为wb1和wb2。
问题在于,在单击功能区按钮时,最初是从活动工作簿(可以是任何工作簿)中调用用户窗体的,而基本上是单独锁定到THAT工作簿上的。
有什么办法可以将用户窗体与该工作簿分离,并进行更改以在用户窗体的背景中显示我的wb2?
我尝试了以下代码,但是它只是关闭了我的用户窗体,因此无法正常工作。
@Grapes([
@Grab("org.gebish:geb-core:3.2"),
@Grab("org.seleniumhq.selenium:selenium-firefox-driver:3.141.59"),
@Grab("org.seleniumhq.selenium:selenium-support:3.141.59")
])
import geb.Browser
browser = new Browser()
println "Hello from test"
有什么想法吗?
答案 0 :(得分:1)
这是我的外接程序中的代码,以一种无模式的用户窗体显示所有打开的工作簿中的所有工作表,并激活了(由dblcick选择)。呼叫:致电ShowModeless
外接程序文件中的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
插件文件中的模块1
'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