Excel VBA – 表单显示和导入数据后提示密码

我有这个密码保护的macros,并显示一个窗体。 最近我添加了从excel导入数据的代码,每当我closures它时都会要求input密码 – 我可以通过它取消,但是我想让它消失,我没有看到它会来的合理原因。

我已经分出了导致这个问题的几行

Sub a() UserForm1.Show strConnString = "Provider=Microsoft.Jet.OLEDB.4.0" & _ ";Data Source=" & "C:\Book1.xls" & _ ";Extended Properties='Excel 8.0; IMEX=1'" & _ ";Persist Security Info=False" Set objRSGlobal = CreateObject("ADODB.Recordset") objRSGlobal.Open "select * from [Sheet1$]", strConnString objRSGlobal.Close Set objRSGlobal = Nothing End Sub 

这进入Module1。 我有一个名为UserForm1的空白窗体。 我使用密码locking代码(用于查看)并将所有内容保存在Book1.xls中。

现在我打开文件,执行Alt + F8运行macros,closures窗体,然后closures文件密码提示出现。 我不明白为什么会出现,如何让它消失。

提前致谢!!

注意 – 对于logging,这也会发生,如果我只是显示表单,并通过UI进行数据导入(数据>导入外部数据>导入数据)

  • 更新 – 它看起来像只有当我从我打开的同一个文件导入时才会发生。

这看起来像Microsoft知识库文章KB280454 http://support.microsoft.com/kb/280454中所述的问题

我遇到了.NET和COM互操作的问题。 该文章build议确保COM参考被释放。 在我的情况下,我无法做到这一点。 我尝试从Excel委托命令到一个非VBA密码保护的工作簿,减less了发生,并最终build立了一个进程来杀死我的应用程序(与Xtreme偏见,使用第二个进程)。 在这个问题的情况下,这些看起来都不合适,但可能需要类似的混合物。

我遇到了同样的问题,它与打开的Excel工作簿(包括当前工作簿)中的Excel / Jet查询有关。 以下Microsoft kb文章描述了该问题。

这个问题似乎在Excel 2010中得到解决,虽然这并没有帮助我(因为我的客户仍在使用Excel 2007)。 一种方法是将数据保存到另一个工作簿中,在那里查询,然后将结果复制回原始工作簿,但这有点麻烦。