我试图在VBA的OneNote中创建一个新笔记本。最终,excel中的记录将自动拉到预定义笔记本中预定义部分内的新笔记。如果笔记本和/或部分不存在,则会创建它。
我尝试使用UpdateHierarchy方法上传新笔记本的新XML架构。我不能完全放下PATH,因为我希望这个脚本能够适应任何使用它的用户(除非我可以从上下文中获取路径?)。
根据MSDN,
如果只传递部分OneNote XML字符串... OneNote会尝试 推断出你想要的变化。例如,如果您包含一个笔记本 只包含一个部分的元素,OneNote后面添加了部分 任何现有的部分。
我认为这意味着我可以提供部分XML,OneNote将自动填充其余部分。我无法找到添加新笔记本的最小值,以下代码会生成:
hrNotebookDoesNotExist 0x80042015笔记本不存在。
以下是代码:
Dim oneNote As OneNote14.Application
Set oneNote = New OneNote14.Application
Dim targetNotebook As String, targetSection As String, targetPage As String
targetNotebook = "The Notes"
targetSection = "Notes"
Dim notebookXml As String
oneNote.GetHierarchy "", hsNotebooks, notebookXml, xs2010
Dim doc As MSXML2.DOMDocument
Set doc = New MSXML2.DOMDocument
If doc.LoadXML(notebookXml) Then
Dim nodes As MSXML2.IXMLDOMNodeList, node As MSXML2.IXMLDOMNode
Dim notebookName As String, notebookPath As String, notebookId As String
Set nodes = doc.DocumentElement.SelectNodes("one:Notebook")
For Each node In nodes
notebookName = node.Attributes.getNamedItem("name").Text
If notebookName = targetNotebook Then
notebookPath = node.Attributes.getNamedItem("path").Text
notebookId = node.Attributes.getNamedItem("ID").Text
End If
Next
If notebookId = vbNullString Then
'create new notebook
Dim newNotebookXml As String
newNotebookXml = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>" _
& "<one:Notebooks xmlns:one=" & Chr(34) & "http://schemas.microsoft.com/office/onenote/2010/onenote" & Chr(34) & ">" _
& "<one:Notebook name=" & Chr(34) & "HUD Notes" & Chr(34) & ">" _
& "</one:Notebook>" _
& "</one:Notebooks>"
Debug.Print (newNotebookXml)
oneNote.UpdateHierarchy newNotebookXml 'This is where the error hits
End If
...
代码仍在继续,但与此问题无关。
如果找不到并且notebookId为null,我如何更改代码来创建名为targetNotebook的笔记本?
谢谢!