Excel

OneNoteの指定したセクションをページごとに指定した形式で出力するマクロ

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

OneNoteのノート名を列挙するマクロ前のページ

漢字かな交じり文をひらがなにするマクロ次のページ

関連記事

  1. Office関連

    [Office 365 Solo]テクニカル サポートってどんなもの?

    前々回の記事に引き続いて、Office 365 Soloの疑問点第三弾…

  2. Office関連

    Outlookを使ってGmail送信を行うVBAマクロ

    下記G Suite アップデート ブログにある通り、今年の6月には“安…

  3. アイコン一覧

    Office 2013 アイコン一覧(F)

    ・Office 2013 アイコン一覧 NUM…

  4. Office関連

    IEサポート終了でVBAマクロはどうなるの?(2)

    ※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性が…

コメント

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

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP