Office関連

Evernote Cloud SDKを使って特定の文字列が含まれるノートを検索するVBAマクロ

前回の記事で、VBAからEvernote Cloud SDKを使ってノートブック名を列挙するマクロを紹介しましたが、今回は指定した文字列が含まれるノートを検索するマクロを紹介します。

SDKのインストールやDeveloper Tokenの取得方法は下記記事をご参照ください。

※ 下記コード中の「Developer Token」と「NoteStore URL」はそれぞれ自分で取得したものに置き換えてください。

Option Explicit

Public Sub Sample()
  Dim en As Object 'EvernoteSDK.ENSessionForCOM
  Dim enSearch As Object 'EvernoteSDK.ENNoteSearchForCOM
  Dim enNotesList As Object 'EvernoteSDK.ENCollection
  Dim enRef As Object 'EvernoteSDK.ENNoteRef
  Dim enNote As Object 'EvernoteSDK.EdamNote
  Dim txtFind As String
  Dim txtContent As String
  Dim i As Long
  
  Const SearchScope_All = 7 'EvernoteSDK.SearchScope.SearchScope_All
  Const SortOrder_RecentlyUpdated = 4 'EvernoteSDK.SortOrder.SortOrder_RecentlyUpdated
  
  Const DeveloperToken As String = "(Developer Token)"
  Const NoteStoreUrl As String = "(NoteStore URL)"
  Const MaxResults As Long = 100 '結果の最大件数
  
  txtFind = "セキュリティ" '検索する文字列
  
  Set en = CreateObject("EvernoteSDK.ENSessionForCOM")
  With en
    .SetSharedSessionDeveloperToken DeveloperToken, NoteStoreUrl
    If .sharedSession.IsAuthenticated = False Then Exit Sub
    
    Set enSearch = CreateObject("EvernoteSDK.ENNoteSearchForCOM")
    Set enNotesList = .sharedSession.FindNotesForCOM( _
                        enSearch.NoteSearch(txtFind), _
                        Nothing, _
                        SearchScope_All, _
                        SortOrder_RecentlyUpdated, _
                        MaxResults)
    If enNotesList.Count > 0 Then
      With ActiveSheet
        .Cells(1, 1).Value = "Note Title"
        .Cells(1, 2).Value = "Notebook"
        .Cells(1, 3).Value = "Date Created"
        .Cells(1, 4).Value = "Date Updated"
        .Cells(1, 5).Value = "TextContent"
        .Rows(1).Font.Bold = True
        For i = 1 To enNotesList.Count
          Set enRef = enNotesList(i).NoteRef
          Set enNote = en.sharedSession.DownloadNote(enRef)
          txtContent = enNote.TextContent
          If Len(txtContent) >= 100 Then txtContent = Left(txtContent, 100) '長い本文は一部のみ表示
          .Cells(i + 1, 1).Value = enNotesList(i).Title
          .Cells(i + 1, 2).Value = enNotesList(i).Notebook.Name
          .Cells(i + 1, 3).Value = enNotesList(i).Created
          .Cells(i + 1, 4).Value = enNotesList(i).Updated
          .Cells(i + 1, 5).Value = txtContent
        Next
      End With
    End If
  End With
  
  MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub

上記マクロを実行すると、選択中のシートにノート名やノートブックのタイトル、本文の一部等が出力されます(途中SDKの仕様により、確認用のメッセージボックスが表示されます)。

上記マクロはGitHubにあったサンプルコードを元にしていますが、サンプルは動かないので当てにならないです。

前回の記事でも書いた通り、オブジェクト ブラウザでメンバー表示もされないので、ガチで手探り状態、正直上記処理に至るまで試行錯誤の連続でした。

検索しても大した情報もヒットしないため、一番参考になるのはSDKのソースコードという、なかなかの苦行っぷりを発揮するEvernote Cloud SDK(COM)の処理ですが、どなたかの参考でなれば幸いです。
(コレ、ひょっとしたら自分でAPI呼んだ方が手っ取り早いのでは?と、思わなくもないです)

Evernote Cloud SDKを使ったVBAマクロ前のページ

MicrosoftのDictateアドインを試してみました。次のページ

関連記事

  1. Office関連

    Adobe Readerを利用してPDFファイルのページ数を取得するVBAマクロ

    mougの回答用に書いたコードです。mougは半年でログが消えてし…

  2. Office関連

    [Office 2013]SkyDriveを無効(非表示)にする。

    「Office 2013 SkyDrive 無効」というキーワードで検…

  3. Office関連

    目次を更新するWordマクロ

    文書の目次を更新するにはTableOfContentsオブジェクトのU…

  4. Office関連

    日経ソフトウエア 2014年 10月号 「VBAでExcelを業務アプリ化」

    購読している雑誌、日経ソフトウエア 2014年 10月号に「イベントプ…

  5. Office関連

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

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

  6. Office関連

    Office 2016のコントロールIDリストが公開されました。

    昨年の秋にリリースされたOffice 2016。そのコントロールI…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP