【发布时间】:2019-01-04 23:45:51
【问题描述】:
我需要帮助才能将我制作的 Excel VBA 主机工具包从 Onenote 2010 移植到 OneNote 2016
TLDR:
a) 如果我想使用 Excel 2016 VBA 主机自动化 OneNote 2016(桌面应用程序),我应该实际查看/参考哪些对象库?我似乎只能链接到 Onenote 12 对象库,有一个 V15 库,但即使我取消单击其余部分,当我尝试引用时也会产生“名称冲突”错误。我的安装错了吗? (Win10+Excel/ON 2016 32位)
b) 在 OneNote 2016 中对 getpagecontent() 的 vba 调用应该如何,特别是 schema 参数是什么,一个字符串常量?我应该关心吗?
加长版
在 https://github.com/jceresearch/onenote_vba_host (public) 中,我维护了一个 Excel 电子表格,其中包含一些脚本来执行诸如将批量页面导出为单独的 doc/pdf 之类的事情,包括旁边的嵌入文件。还可以对页面进行自动编号,并在页面中自动添加内容。它在功能区中添加了一个菜单,您可以在那里看到选项。
代码很乱,但在 Onenote 2010 上运行良好。 2016年我很快就要工作了。
2016代码的关键部分在class代码中,调用OneNote起来:
Set app = New OneNote12.Application
在我的 2010 代码/安装中,它已经是 OneNote14.Application,但我拥有的 office 365 版本只允许我引用 Onenote12 对象库。
还有一个“Microsoft OneNote 15.0 类型”库,但是当我单击它时,即使我删除了旧库,它也会产生名称冲突的错误。还有一个扩展类型库,Excel 也不让我参考。
所以当前引用的库是:
- Microsoft Office 16.0 对象库(需要添加额外的功能区元素)
- Microsoft OneNote 12.0 对象库
- Microsoft XML,V3.0(我不得不从 Excel 默认建议的 V6 降级)
- Microsoft Forms 2.0 对象库
- Microsoft VBScript 正则表达式 5.5
有了这些,我可以运行宏并调用 OneNote 应用程序,甚至可以获取笔记本和分区的列表。
但是,当主机尝试运行时,OneNote 会严重崩溃:
app.getPageContent sNodeID, sXML, piAll
我尝试了一些方法,例如只带基本数据但结果相同,还尝试了各种其他笔记本、页面、部分。
我认为问题可能与对象库的旧版本和/或在 getpagecontent 的文档中提到使用 xsSchema 参数(xs2013 等)有关。见https://docs.microsoft.com/en-us/office/client-developer/onenote/application-interface-onenote
欢迎任何想法,顺便说一句,如果有人想帮助改进工具包,欢迎联系。
谢谢!
【问题讨论】:
-
名称冲突意味着如果不与全局命名空间中已经存在的内容(来自另一个引用的库)发生冲突,则无法完全加载库 - 使用后期绑定而不是引用类型是否有效图书馆?
-
引用类型库还应包括 VBA 标准库、STDOLE 和 Excel 类型库。顺便说一句,对此表示赞赏 - OneNote 不是 VBA 主机应用程序,这意味着您可能处于大多数未知领域。祝你好运!
-
非常感谢 Mathieu,我会试一试的。还没有尝试过后期绑定,因为它的开发和调试变得更加棘手......没有工具提示帮助等,比如在大雾中航行到未知领域。
标签: excel vba onenote onenote-api