【发布时间】:2015-02-21 02:43:04
【问题描述】:
我看到了几个与使用 Activeworkbook 时未设置对象变量有关的问题,但在我的特定场景中没有。我在 workbook_open 中使用了一些代码来测试一个条件来决定是否应该向用户显示一个表单
If Len(ActiveWorkbook.Names("DCStype_Selected").RefersToRange.Value) = 0 Then
这对大多数用户来说在 99% 的情况下都能正常工作。但是,一些用户报告了错误 91 - 对象变量或未设置块变量,并且它位于 activeworkbook 行。
我相信我已经跟踪了发生这种情况的情况,并且它始终适用于在受信任位置没有我的 excel 工作簿的用户,因此会提示启用宏,并且当他们单击“启用”按钮时会发生此错误。
一旦我通过将文件夹设置为受信任位置并将工作簿移动到该文件夹来与他们交谈,就不会发生此问题。
谁能告诉我一种更具防御性的方式来对我的线路进行编码,以使其不受用户安全设置的影响?
谁能解释一下为什么这个错误只发生在这个特定的场景中?
【问题讨论】:
-
不确定,但这可能会有所帮助。而不是
ActiveWorkbook,而是在打开工作簿时将其分配给一个变量,例如Set wB = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True),然后测试wB。查看我对上一篇帖子的回答here -
@DaveU - 将对此进行探索,但使用精确的语法是不可能的。这个工作簿被多个位置的多个客户使用,实际上没有一个在我们公司,所以我无法控制硬件、软件、文件位置等。所以如何在不使用“activeworkbook”的情况下检索当前工作簿的详细信息似乎是我的问题
-
哦,我明白了。也许另一种方法是遍历所有打开的工作簿并将 wB 设置为名为“DCStype_Selected”的工作簿。然后测试 wB 并在 wB = Nothing 时采取适当的措施。
-
@DaveU - 谢谢戴夫,这听起来不错