【发布时间】:2015-06-03 19:21:27
【问题描述】:
Unlocking Password Protected VBA project 提供的代码在 32 位下工作,但不是 64 位。 具体来说,
Ret = FindWindow(vbNullString, "VBAProject Password")
总是返回 0。我试过了
Ret = FindWindow("#32770", "VBAProject Password")
Ret = FindWindow("XLMAIN", "VBAProject Password")
没有任何作用。我还尝试了以下 API:setforegroundwindow、bringwindowtotop、setfocus、getactivewindow、getwindowthreadprocessid。仍然失败,所以我认为这不是焦点问题。也许是时机?我尝试使用
SetTimer
但我是 API 新手,所以不知道如何实现。
我通过personal.xlsb 中的workbookopen 应用程序事件调用它我试图在打开任何工作簿时填写密码。
Private Sub AppEvent_WorkbookOpen(ByVal wb As Excel.Workbook)
If wb.VBProject.Protection <> 1 Then
Exit Sub
End If
Call unlockvba(wb)
End Sub
编辑:我已将我的声明设置为 PtrSafe 和 LongPtr(如果适用)。
【问题讨论】:
-
找到这个。 ozgrid.com/forum/showthread.php?t=174982 显然,findwindow 不起作用,因为密码对话框是模态的。似乎需要一个计时器,但不确定如何实现:/
-
@SiddharthRout 伙计。我知道。这就是一切的开始。我上面指向其他问题的链接指向您的网站,所以我没有在这里再次链接 XD