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

    PDFを他のファイル形式に変換するVBAマクロ

    「PDF 変換 Word VBA」といったキーワード検索でのアクセスが…

  2. アイコン一覧

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

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

  3. Office関連

    [Office 2013]コントロール日英比較表

    日本語版と英語版のOffice 2013でコントロール(コマンド)名や…

  4. Office関連

    Google Calendar APIを使って日本の祝日を取得するVBAマクロ

    祝日の一覧を用意する必要があったので、Google Calendar …

  5. Office関連

    VALUE DOMAINで管理しているドメインをOffice 365で使用する。

    Office 365をセットアップすると設定される初期ドメイン「onm…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP