Office関連

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関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  2. Office関連

    選択範囲内にある特定のフォントの文字列を別のフォントに置き換えるWordマクロ

    選択範囲内で「MS ゴシック」が使われている文字列のフォントを「MS …

  3. Office関連

    各スライドに配置されたオートシェイプからテキストを取得するPowerPointマクロ

    各スライドに配置されたオートシェイプからテキストを抜き出す処理を考えて…

  4. アイコン一覧

    Office 365アイコン(imageMso)一覧(D)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  5. アイコン一覧

    Office 2013 アイコン一覧(N)

    ・Office 2013 アイコン一覧 NUM…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP