【发布时间】:2016-10-30 07:30:50
【问题描述】:
我正在使用 Excel 制作一个应用程序,所有用户交互都发生在用户表单中。我希望我的应用程序在单独的 excel 实例中运行,而不是在我的应用程序运行时已打开的任何其他文件或用户手动打开的任何文件中运行。我发现以下链接是相关且有趣的,但我不确定如何在我的应用程序中实现它:Answers.microsoft.com Can I create an instance of Excel that can only be accessed by my VBA project?
这是我想实现的方式:
我使用两个文件:StartFile.xlsb、SystemFile.xlsb
- 用户通过单击文件正常打开 StartFile
- 如果未启用宏,StartFile 的Sheet1 会显示警告。
- 启用宏后,StartFile 会检查 excel 版本等...
- 如果 StartFile 一切正常,则在新的 excel 实例中打开 SystemFile,然后自行关闭
- SystemFile 打开并以某种方式将其 excel 实例设为私有(使用“Application.IgnoreRemoteRequests = True”?)
澄清:用户将无法与私有 excel 实例应用程序进行交互。它的 .visible 设置将保持为假。它用于显示用户表单,因此对用户来说这看起来像是一个独立的应用程序
旁注:无论宏安全设置如何,如何确保我的新 excel 实例启用了宏? (用户已经启用了一次宏)(到目前为止我还没有注意到这种情况,是吗?)
【问题讨论】:
-
我建议您考虑使用一些不受宏限制影响的技术。 HTA 与 JScript/VBScript(VBScript 与 VBA 最相似)或 WinForms 与 C#/VB.NET(WinForms 模型类似于 VBA UserForms 模型)是首先想到的可能性。
-
您无法确保宏已启用,也无法更改该限制的设置。许多公司(和智能用户)有意在全局范围内禁用宏,您的应用程序无法强制它们更改。这是依赖与您的完全不同的应用程序来实现您的主要功能的缺点。如果您希望能够控制您的应用可以做什么和不可以做什么,请编写您自己的代码。