今回は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を起動していないとエラーになる、これに気づくまで結構ハマってしまいました・・・。



















この記事へのコメントはありません。