Office関連

Outlookの予定本文の一部を文字装飾するVBAマクロ

Excelの質問掲示板を見たら、「Outlookの予定本文の一部をマクロで太字にしたい」との質問がありました。

似たような質問に5年ほど前に回答したことがあるのですが、この手の処理は“WordEditor = WordのDocumentオブジェクト経由で処理するのが鉄板”だと思います。

Option Explicit

Public Sub Sample()
  Dim app As Object 'Outlook.Application
  Dim itm As Object 'Outlook.AppointmentItem
  Dim ins As Object 'Outlook.Inspector
  Dim doc As Object 'Word.Document
  Const olAppointmentItem = 1
  Const olEditorWord = 4
  Const olSave = 0
  Const wdBlue = 2
  
  'CreateObject("Outlook.Application")では上手く処理できない場合があるため、
  '先にOutlookを起動してからGetObjectで取得
  '※Shellで起動しても上手くいかない場合は、手動で事前にOutlookを起動しておく
  On Error Resume Next
  Set app = GetObject(, "Outlook.Application")
  If app Is Nothing Then
    Shell "OUTLOOK", vbNormalFocus
    Do
      Set app = GetObject(, "Outlook.Application")
      DoEvents
    Loop While app Is Nothing
  End If
  On Error GoTo 0
  
  '予定作成
  Set itm = app.CreateItem(olAppointmentItem)
  With itm
    .Subject = "テスト予定"
    .Start = DateAdd("d", 1, Now())
    .Display
    Set ins = .GetInspector
  End With
  
  'WordEditor(Document)経由で予定文字装飾
  If ins.EditorType = olEditorWord Then
    Set doc = ins.WordEditor
    doc.Range.InsertAfter "あいうえお" & vbNewLine & _
                          "かきくけこ" & vbNewLine & _
                          "さしすせそ"
    With doc.Range(6, 11).Font
      .ColorIndex = wdBlue
      .Bold = True
    End With
  End If
  
  '作成した予定を保存して終了
  itm.Close olSave
  app.Quit
End Sub

コード中にコメントとして記載していますが、Excel VBAから処理をする際、「CreateObject(“Outlook.Application”)」で新規にOutlookを起動して処理しようとした場合、エラーが発生して上手く処理できないことがあったため、Shell関数で先にOutlookを起動してから処理を行うようにしています。

文字装飾を行う部分に関しては、色々な書き方があるため、その時々に応じた処理をするのが良いと思います(上記コードではWordのRangeオブジェクト経由で文字装飾しています)。

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP