皆様こんにちは、ノグチです。
前回記事では、Outlook VBAでタスクを登録する方法をご紹介しました。
今回はその応用編として、エクセルワークシートにリストアップしたタスクの一覧を、VBAでまとめてOutlookのタスクに登録する方法をご紹介していきます!
前回のおさらい
前回記事でご紹介した、1件のタスクを登録するコードはコチラでした。
TaskItemオブジェクトのプロパティに、コード内で直接タスクに登録したい値をセットしていました。
Sub RegTask() Dim objTask As TaskItem Set objTask = CreateItem(olTaskItem) With objTask .Subject = "やらねばタスク" .StartDate = "2018/10/1" .DueDate = "2018/10/10" .ReminderSet = True .ReminderTime = "2018/10/8 12:00" .Body = "住民票と印鑑証明取得@xxx区役所" .save End With End Sub
しかしこのままのコードでは1件ずつしかタスクが登録できませんね。
エクセルワークシートの内容によって複数のタスクをまとめて登録できるように、こちらのコードに色々書き加えていきましょう!
MicroSoft Excel xx.x Object Libraryの参照設定
まずは、Outlook VBAからExcelを操作できるように、MicroSoft Excel xx.x Object Libraryの参照設定をしておきましょう。
設定については下記記事で紹介していますので、こちらをご覧くださいね。
タスク一覧記入用のワークシートを用意
Outlookのタスクに登録したいタスクを、エクセルのワークシートに記入しておきましょう。
今回は、こんな感じのリストを用意しました。
この内容を、纏めてタスクに登録できるように、おさらいのコードに追加していきましょう。
エクセルワークシートの一覧からタスクを登録するコードを記述
Excelのオブジェクト達を取得する
MicroSoft Excel xx.x Object Libraryの参照設定の項でご紹介している記事でも同様にご紹介していますが、まずはOutlook VBAからExcelを操作できるように、ワークブックオブジェクトとワークシートオブジェクトを取得しましょう。
まずは、エクセルのアプリケーションオブジェクトを取得する為の変数です。
Dim objExcel As Excel.Application
そして、各オブジェクト用の変数を宣言するのでしたね。
Dim wb As Excel.Application.Workbook Dim ws As Excel.Application.Worksheet
お次は宣言した変数で、各オブジェクトを取得しましょう。
このように。
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open(タスク一覧のエクセルファイルパス) Set ws = wb.Worksheets("タスク一覧")
これで、エクセルのオブジェクト達の取得はOKです。
タスク登録処理をループ文で挟み込む
では、Outlook VBAからエクセルが操作できるようになったところで、お次はタスク登録の部分をループで挟んじゃいます。
そして、TaskItemオブジェクトのプロパティにセットする値を、エクセルワークシートから取得するように変えて…
Sub TaskRegWithExcel() Dim objExcel As Excel.Application Dim wb As Workbook Dim ws As Worksheet Dim strFile As String Dim i As Long Dim objTask As TaskItem strFile = "C:\Users\Desktop\タスクリスト.xlsx" Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open(strFile) Set ws = wb.Worksheets("タスク一覧") For i = 2 To 4 Set objTask = CreateItem(olTaskItem) With objTask .Subject = ws.Cells(i, 1).Value 'タスクのタイトル .StartDate = ws.Cells(i, 2).Value '開始日 .DueDate = ws.Cells(i, 3).Value '期限 .ReminderSet = ws.Cells(i, 4).Value 'アラームを鳴らすかどうか .ReminderTime = ws.Cells(i, 5).Value 'アラームを鳴らす時間 .Body = ws.Cells(i, 6).Value 'タスク内容 .Save End With Next i End Sub
はい、おさらいのコードにループ文を入れて、エクセルワークシートの参照を追加しただけです。
超単純。
エクセルワークシートのタスク一覧をOutlookのタスクに登録する
上のコードを実行すると、この通りOutlookのタスクにちゃんと登録されます。
心配性のあなたへ…Displayメソッドで登録前に内容をチェック
タスクの内容がちゃんとワークシートに記入した通りになっているのか不安…という方には、TaskItemオブジェクトのDisplayメソッドで登録直前のタスクの内容をチェックすることができます。
これを、Saveメソッドの代わりに仕込んでおけば、タスク登録の画面で自分が「保存して閉じる」をクリックしない限り、タスクに登録されません。
Displayメソッドを実行すると、こんな感じでタスクの登録直前の状態で内容をチェックできます。
但し、目視でタスクの内容をチェックしてから登録したい!という目的でDisplayメソッドを使う場合は、DisplayメソッドはSaveメソッドと置き換えて使うようにしましょう。
Displayメソッドの後にSaveメソッドが記述されていると、折角タスクの登録直前の画面が開いてもその直後にSaveメソッドが実行されてしまうので、Displayメソッドを挟んだ意味がなくなってしまいますよ。
最後に
今回は、エクセルワークシートにリストアップしたタスクの一覧を、VBAでまとめてOutlookのタスクに登録する方法をご紹介しました。
今回の方法なら、思いついたそばからエクセルのワークシートにタスクを記入しておいて、例えば一日の終わりにマクロ実行してタスクを登録しておく、ということもできますね。
また、一日の仕事を終えて退勤する前に、「明日のやらねば」をタスクとして登録しておくこともできますよ。
あと、タスクって実は宛先にメールアドレスを指定することで、依頼として登録することもできるんです。
例えば、職場に新人さんが入ってきたときに、依頼で纏めてやってほしいことを登録しておいてあげると便利かもしれませんね。
それでは、最後までお読み頂きありがとうございました!
連載目次:Outlook VBAでタスクを登録してみよう
Outlook VBAで基本的なタスクを登録する方法と、応用編としてエクセルワークシートに書き出した複数のタスクを、一括で登録する方法をご紹介していきます。