■3.「新規」か「追加」か

 個々のPublishObjectオブジェクトの設定が完了したらいよいよ日報の「発行」を行ないます。基本の構文は、
 ActiveWorkbook.PublishObjects(1).Publish
となります。最初に発行したいPublishObjectオブジェクトを指定し、Publishメソッドで与えられた設定どおりに発行を行ないます。この時、Publishメソッドに引数「True」を与えると、すでに同じ場所に同じ名前のファイルがあった場合、上書き保存して置き換えられます。逆に、引数「False」を設定すると、ファイルの末尾に発行したものが付け加えられます。同じ場所に同じ名前のファイルがない場合は、引数の値にかかわらず新規にHTML形式のファイルが作成されます。
 それでは、実際に日報をリーダーのパソコン「BossPC」上の共有フォルダ「日報」内に発行してみましょう。日報の形式は「今日のひとこと」という1日の業務に対する所感と、先程記入した営業の活動履歴データの中から、当日の日付のものだけを抽出し、2つの異なる範囲をひとつのHTMLファイルにまとめて作成してみたいと思います。営業社員が使用しているシートのうち、上記の「今日のひとこと」が記入されているのが3枚目のシートの「"B4:G4"」、営業の活動履歴データは1枚目のシートに記入されているものとします。この時、まず2箇所のPublishObjectオブジェクトを設定するコードは、
 Sub SetNippouPBO()
 
     myName = "増田"
 
     ActiveWorkbook.PublishObjects.Add _
      SourceType := xlSourceRange, _
      Filename := "¥¥BossPC¥報告書¥" & myName & "日報.htm", _
      Sheet := Sheets(3).Name, _
      Source := "B4:G4", _
      HtmlType := xlHtmlStatic, _
      DivID := "FirstOBJ", _
      Title := myName & "今日のひとこと"
     ' 「今日のひとこと」を設定
 
     ActiveWorkbook.PublishObjects.Add _
      SourceType := xlSourceAutoFilter, _
      Filename := "¥¥BossPC¥報告書¥" & myName & "日報.htm", _
      Sheet := Sheets(1).Name, _
      HtmlType := xlHtmlStatic, _
      DivID := "SecondOBJ", _
      Title := myName & "報告書"
     ' 1枚目のデータ入力シートのオートフィルタをかけて
     ' 絞り込んだ範囲を設定
 
 End Sub
となります。2箇所の離れたシート上にあるデータをひとつのHTMLファイルにまとめるために、「FileName」プロパティに同一のものを設定してある点に注意してください。そしてこの2箇所のPublishObjectオブジェクトを発行するためのコードは、
 Sub PublishNippou()
     
 Sheets(1).Range("B3").AutoFilter _
 Field:=1, Criteria1:=Format(Date, "m月d日")
 ' DATE関数を使い、当日のデータにフィルタをかけ
 ' データを絞り込む
     
 With ActiveWorkbook
  .PublishObjects("FirstOBJ").Publish True
  .PublishObjects("SecondOBJ").Publish False
 End With
 ' それぞれの範囲を引数を指定して「発行」
     
  End sub
となります。PublishObjectオブジェクトにしっかりとDivIDプロパティを設定してあれば、それを利用して上記コードのように、PublishObjectsコレクションのなかから特定のPublishObjectオブジェクトを指定することも可能となります。結果は図6のように、離れた場所にあったデータがPublishメソッドの引数を「False」に設定したことにより、ひとつのHTML文章に結合されました。また、オートフィルタの範囲を指定した箇所も抽出後の該当データだけが表示されているのが確認できます。

図6:発行の組み合わせを上手に使って出力する