今回はOneNoteの指定したセクションをページごとに指定した形式で出力するマクロを紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 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を起動していないとエラーになる、これに気づくまで結構ハマってしまいました・・・。
この記事へのコメントはありません。