Office関連

EvernoteのノートをXML形式で保存するVBAマクロ

Evernote for WindowsのType Library(Evernote API (enapi) 1.0 Type Library(C:\Program Files\Evernote\Evernote\enapi.dll))を利用した、Evernoteのノートを列挙するスクリプトを何年か前に書いたのですが、今回はノートをXML形式で保存(エクスポート)するマクロを紹介します。

Option Explicit

Public Sub Sample()
  'Evernoteのノートを保存
  ExportEvernoteNote "(ユーザー名)", _
                     "(パスワード)", _
                     "(ノートブック名)", _
                     "(保存先フォルダのパス)"
  'Evernoteのノートブックを保存
  ExportEvernoteNoteBook "(ユーザー名)", _
                         "(パスワード)", _
                         "(ノートブック名)", _
                         "(保存先フォルダのパス)"
End Sub

Private Sub ExportEvernoteNote(ByVal Username As String, _
                               ByVal Password As String, _
                               ByVal NotebookName As String, _
                               ByVal FolderPath As String)
'指定したノートブック内のノートをXML形式で保存
' - Username:Evernoteのユーザー名
' - Password:Evernoteのパスワード
' - NotebookName:Evernoteのノートブック名
' - FolderPath:保存先フォルダのパス
  Dim en As Object 'enapiLib.Evernote
  Dim nb As Object 'enapiLib.Notebook
  Dim n As Object  'enapiLib.Note
  Dim ff As Integer
  
  If Right(FolderPath, 1) <> ChrW(&H5C) Then _
     FolderPath = FolderPath & ChrW(&H5C)
  If CreateObject("Scripting.FileSystemObject").FolderExists(FolderPath) = False Then
    MsgBox "保存先フォルダが見つかりませんでした。" & vbCrLf & _
           "処理を中止します。", vbCritical + vbSystemModal
    Exit Sub
  End If
  
  On Error Resume Next
  Set en = CreateObject("enapi.Evernote")
  en.Login Username, Password, vbNullString
  If Err.Number <> 0 Then
    MsgBox "Evernote for Windowsがインストールされているか、" & vbCrLf & _
           "またはユーザー名とパスワードが合っているか確認してください。", vbCritical + vbSystemModal
    Exit Sub
  End If
  On Error GoTo 0
  
  Set nb = GetNotebook(en, NotebookName)
  If nb Is Nothing Then
    MsgBox "指定したノートブックが見つかりませんでした。" & vbCrLf & _
           "処理を中止します。", vbCritical + vbSystemModal
    Exit Sub
  End If
  
  'Noteごとに出力
  For Each n In nb.Notes
    ff = FreeFile
    Open FolderPath & n.Title & "(" & n.ID & ").xml" For Binary As #ff
    Put #ff, , n.Export
    Close #ff
  Next
  
  MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub

Private Sub ExportEvernoteNoteBook(ByVal Username As String, _
                                   ByVal Password As String, _
                                   ByVal NotebookName As String, _
                                   ByVal FolderPath As String)
'指定したノートブックをXML形式で保存
' - Username:Evernoteのユーザー名
' - Password:Evernoteのパスワード
' - NotebookName:Evernoteのノートブック名
' - FolderPath:保存先フォルダのパス
  Dim en As Object 'enapiLib.Evernote
  Dim nb As Object 'enapiLib.Notebook
  Dim ff As Integer
  
  If Right(FolderPath, 1) <> ChrW(&H5C) Then _
     FolderPath = FolderPath & ChrW(&H5C)
  If CreateObject("Scripting.FileSystemObject").FolderExists(FolderPath) = False Then
    MsgBox "保存先フォルダが見つかりませんでした。" & vbCrLf & _
           "処理を中止します。", vbCritical + vbSystemModal
    Exit Sub
  End If
  
  On Error Resume Next
  Set en = CreateObject("enapi.Evernote")
  en.Login Username, Password, vbNullString
  If Err.Number <> 0 Then
    MsgBox "Evernote for Windowsがインストールされているか、" & vbCrLf & _
           "またはユーザー名とパスワードが合っているか確認してください。", vbCritical + vbSystemModal
    Exit Sub
  End If
  On Error GoTo 0
  
  Set nb = GetNotebook(en, NotebookName)
  If nb Is Nothing Then
    MsgBox "指定したノートブックが見つかりませんでした。" & vbCrLf & _
           "処理を中止します。", vbCritical + vbSystemModal
    Exit Sub
  End If
  
  'Notebook単位で出力
  ff = FreeFile
  Open FolderPath & nb.Name & "(" & nb.ID & ").xml" For Binary As #ff
  Put #ff, , nb.Export
  Close #ff
  
  MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub

Private Function GetNotebook(ByRef EvernoteApp As Object, _
                             ByVal NotebookName As String) As Object
'名前を指定してNotebookオブジェクトを取得
  Dim nb As Object 'enapiLib.Notebook
  Dim ret As Object
  
  Set ret = Nothing '初期化
  For Each nb In EvernoteApp.Notebooks
    If nb.Name = NotebookName Then
      Set ret = nb
      Exit For
    End If
  Next
  Set GetNotebook = ret
End Function

ExportEvernoteNoteプロシージャはノート単位、ExportEvernoteNoteBookプロシージャはノートブック単位で保存します。

VBAやスクリプトでノートの保存ができるのはとても便利なのですが、あくまでもWindows版クライアントを利用しているので、Evernote for Windowsが必要である点と、PCに保存されたデータのみが対象となるので、同期されていないデータは保存できない点は要注意です。

関連記事

  1. Office関連

    [Win32 API]PowerPointマクロにショートカットキーを割り当てる。

    数日前、“PowerPointだとマクロにショートカットキーを割り当て…

  2. Office関連

    未読アイテムの件数を取得するOutlookマクロ

    「Outlook 未読 件数 マクロ」といったキーワード検索でのアクセ…

  3. Office関連

    Office製品の開発者用リファレンス(ダウンロード版)

    Docs.comでまとめていたリンクなんですが、来月15日にすべて廃止…

  4. Office関連

    セル内の改行をカウントするExcelマクロ

    「Excel セルの内容 改行を数える VBA」といったキーワード検索…

  5. Office アドイン

    [Officeアドイン]アドイン コマンド(Add-In Commands)の紹介

    前回の記事は“Office アドイン”のAdvent calendar…

  6. Office関連

    VBAで○○を禁止したい!・・・と思う前に。

    Office系Q&Aサイトを見ているとたまに出てくるのがこの質問。…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP