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

    アドインやテンプレートのバージョンチェックを行うVBAマクロ

    色々なアプリケーションに実装されている、「最新バージョンの確認」機能、…

  2. Office関連

    PDFファイルに差し込み印刷するVBAマクロ

    このページにもあるように、AcrobatはOLEオートメーション機能に…

  3. Office関連

    蛍光ペンでマークした部分の文字数をカウントするWordマクロ

    Twitterでたまたま下記のツイートを見つけたので、簡単な処理を考え…

  4. Office関連

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

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

  5. Office関連

    Office 2016 Preview for Windowsのサポート情報まとめ

    「Office のサポート ページ - support.office.…

  6. Word

    GoogleとYahoo!で同時に翻訳するWordマクロ

    「Google翻訳で文字列を翻訳するマクロ」と「Yahoo!翻訳で文字…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP