【发布时间】:2013-03-07 13:42:17
【问题描述】:
我在取消保护受保护 Excel 的 VBA 项目时遇到问题。
IntPtr hWnd = FindWindow(null, ES.oXL.VBE.MainWindow.Caption);//Find window
if (hWnd != IntPtr.Zero)
{
bool ret = BringWindowToTop(hWnd); //Bring VBE to top.
}
SendKeys.SendWait("%{F11}%TE" + strPassword + "~~%{F11}");
SendKeys.SendWait("{ENTER}");
SendKeys.SendWait("xyz");
SendKeys.SendWait("{ENTER}");
我编写了这样的代码来解除对 VBA 项目的保护。调试应用程序时效果很好。
我们使用 com 对象模型。当我在 dll 配置单元中应用相同的 dll 时,调用我遇到错误的函数
System.ComponentModel.Win32Exception: Access is denied at System.Windows.Forms.SendKeys.SendInput(Byte[] oldKeyboardState, Queue previousEvents)
任何帮助说明为什么它的工作原理?
【问题讨论】:
-
请问为什么要在运行时解除对VB项目的保护?
-
我们需要在运行时向 excel 添加一个新宏
-
老实说,这不是您想要做的。您应该只打开 Excel 文件,在 Visual Basic 编辑器项目资源管理器中手动取消保护,并在保存宏工作簿并使其可供用户使用之前添加新代码。
-
你可能想使用HERE所示的API