今回はOneNoteの指定したセクションをページごとに指定した形式で出力するマクロを紹介します。
Option Explicit Public Sub Sample() PublishOneNoteSection "Web", "C:\Test", "docx" MsgBox "処理が終了しました。", vbInformation + vbSystemModal End Sub Public Sub PublishOneNoteSection(ByVal SectionName As String, ByVal FolderPath As String, Optional ByVal PublishFormat As String = "pdf") '指定したセクションをページごとに指定した形式で出力する。 'SectionName : セクション名 'FolderPath : 出力先 'PublishFormat : 出力形式 Dim AppON As Object Dim Exec As Object Dim PublishFormatNo As Long Dim n As Object Dim x As String Dim i As Long PublishFormat = LCase$(PublishFormat) Select Case PublishFormat Case "mht" PublishFormatNo = 2 Case "pdf" PublishFormatNo = 3 Case "xps" PublishFormatNo = 4 Case "one" PublishFormatNo = 0 Case "onepkg" PublishFormatNo = 1 Case "doc", "docx" PublishFormatNo = 5 Case "emf" PublishFormatNo = 6 Case "htm", "html" PublishFormat = "htm" PublishFormatNo = 7 Case Else PublishFormat = "pdf" PublishFormatNo = 3 End Select If Right$(FolderPath, 1) <> Application.PathSeparator Then FolderPath = FolderPath & Application.PathSeparator On Error Resume Next Set Exec = CreateObject("WScript.Shell").Exec("ONENOTE.EXE") Set AppON = CreateObject("OneNote.Application") AppON.GetHierarchy vbNullString, 4, x With CreateObject("Msxml2.DOMDocument") .async = False If .LoadXML(x) Then Set n = Nothing '初期化 Set n = .SelectSingleNode("/one:Notebooks/one:Notebook/one:Section[@name='" & SectionName & "']") If Not n Is Nothing Then For i = 0 To n.SelectNodes("one:Page").Length - 1 AppON.Publish n.SelectNodes("one:Page")(i).getAttribute("ID"), FolderPath & SectionName & "_page" & i + 1 & "." & PublishFormat, PublishFormatNo Next Set n = Nothing End If End If End With Set AppON = Nothing Exec.Terminate Set Exec = Nothing If Err.Number <> 0 Then MsgBox "エラーが発生しました。" & vbCrLf & vbCrLf & "エラー内容:" & Err.Description, vbCritical + vbSystemModal End If On Error GoTo 0 End Sub
上記コードではPublishメソッドでページごとに出力していますが、ノートやセクションごとに出力することも可能です(第1引数bstrHierarchyIDで指定)。
また、ファイルを出力する際、出力先に同名のファイルが存在する場合はオートメーションエラーが発生しますので、その点はご注意ください。
PublishメソッドはOneNoteを起動していないとエラーになる、これに気づくまで結構ハマってしまいました・・・。
この記事へのコメントはありません。