1

我正在 VB.Net 中开发 Excel VSTO 加载项。鉴于用户可能在使用我的主窗体之前、之后或期间打开或关闭许多工作簿,我试图解决知道我的加载项应该影响哪个工作簿的问题。

主要功能都围绕着编辑一个主模板文件,用户可能会使用有用的名称保存该文件,并且可能会返回以供参考或进一步编辑。加载项打开一个表单并执行各种功能,例如将信息从数据库添加到工作表,或将工作表添加到工作簿(以及大量统计信息)。我所做的大部分工作都依赖于调用特定的工作簿:

        CurrentRun = Marshal.GetActiveObject("Excel.Application")
        CurrentBook = CurrentRun.Workbooks(CurrentIndex)

CurrentIndex使用当前打开的工作簿的名称填充/更新的组合框中的索引在哪里:

    ...
    ControlCurrentWBComboBox.Items.Clear()
    CurrentRun = Marshal.GetActiveObject("Excel.Application")
    For n = 1 To CurrentRun.Workbooks.Count()
        ControlCurrentWBComboBox.Items.Add(CurrentRun.Workbooks(n).Name)
    Next
    CurrentRun = Nothing
    ...

这要求用户选择他们想要使用的工作簿(按名称)。这似乎是个好主意,直​​到我今天把它放在 8 个不同的用户面前。大多数人最终习惯了选择工作簿,但并非没有很多抱怨和抛出错误(处理得很好)。2 个用户从未得到它,并且不断地不小心编辑错误的工作簿,并在使用一个小时后抛出错误。

有没有更好的方法来处理这个?我正在考虑尝试制作两个版本:一个带有上述版本,一个用于需要较少选择的人。有没有办法通过将 VBA 代码放入工作簿本身来强制实现一种一对一的关系?

我是不是通过尝试处理这个或引用 ActiveWorkbook 以外的任何东西来作为基础?

[注意:蓝色警告告诉我这是一个主观问题,我有点害怕。我不是故意的;也许我需要措辞方面的帮助?]

4

1 回答 1

1

如果您的加载项不能与任何打开的工作簿“正常工作”,那么您可能不应该使用应用程序加载项;相反,您应该使用Document Add-In

在这种情况下,如果用户打开了 3 个工作簿(每个工作簿都有加载项),他们将各自在自己的域中操作——就好像其他工作簿不存在一样。

如果这是您环境中的一个选项,我强烈推荐它作为最佳实践。

于 2013-03-29T21:12:59.843 回答