【问题标题】:How to port OneNote 2010 vba scripts (hosted in a XLSM file) to work in Onenote 2016如何移植 OneNote 2010 vba 脚本(托管在 XLSM 文件中)以在 Onenote 2016 中工作
【发布时间】: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


【解决方案1】:

这是我通过反复试验找到的解决方案:

一个。我犯了一个愚蠢的错误,直到我孤立地测试事物时才意识到。我相信我的班级名称与较新的库之一(可能是 clsOneNoteHandler)发生冲突。更改为唯一名称似乎可以解决大部分问题,尤其是阻止加载最新的对象库并最终导致 OneNote 崩溃。

b.我设法链接到 Onenote 15.0 对象库(不是扩展对象库),这似乎与我的 2010 代码兼容。我注意到它的运行速度明显变慢(使用 Office 2016 32 位重新映像到 Windows 10 后的同一台机器)。

c。我仍然保留了 Microsoft XML、V3.0 库引用和语法来解析 onenote XML 内容,并且在我所见的情况下工作正常。

我需要继续对其进行回归测试,但对我来说最重要的功能是将页面导出为文档及其嵌入文件,这在 Onenote 2016 中仍然有效。

希望这会对那里的某个人有所帮助。

向 cmets 致以问候和感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多