Windowsには,めったに使用されないサービスがいくつか存在するといわれています。そのようなサービスは,SP2からは,デフォルトで起動しない方針が打ち出されています。そこで今回は,第26回で紹介したサンプル・プログラムの一部を変更し,各種サービスの状態をExcelシート上に表示してみます。SP1とSP2の間には,いったいどのような違いがあるのでしょうか。さっそく調べてみましょう。

図1●サンプル・プログラムの実行結果
図2●「通常のサービス」情報
図3●無効になっているサービスの情報

今回のサンプル・プログラム

 第26回では,「ブート起動型サービス」と「通常のサービス」の2種類のサービス情報を表示しました。そこでまず,今回のサンプル・プログラムをこちらからダウンロードし,「ブート起動型サービス」と「通常のサービス」情報をSP2環境で取得し,SP1環境での情報と比較してみることにしましょう。筆者のSP2環境では,図1[拡大表示]のような「ブート起動型サービス」情報が表示されました。

 これは,SP2環境のサービス総数が278個,「ブート起動型サービス」の数が18個であることをそれぞれ示しています。「ブート起動型サービス」数は1個,サービス総数は5個増えています。増えているサービスの詳しい分析は,SP2の正式版が出荷されてからにします。なお,情報表示には複数の色を使用していますが,技術的な説明は後ほど行います。

 それでは次に,「通常のサービス」情報を表示させてみましょう(図2[拡大表示])。ご覧のように,「通常のサービス」数はSP1とSP2の両環境ではまったく変化していません。それでは最後に,無効になっているサービスの情報を表示させてみます(図3[拡大表示])。

 第26回では無効なサービスの情報を取得していませんから,この場で比較できませんが,お時間のあるときに自分のWindows XP SP1環境で試してみてください。無効となっているサービスが68個とはかなりの数ですね。どのようなサービスが無効になっているのか気になるところですが,それは後の楽しみに取っておきましょう。

サンプル・プログラムの技術背景

 今回のサンプル・プログラムでは,第26回サンプル・プログラムをNew31WithExcelクラスのShowServicesメソッドとして移植しています。形式上メソッドをクラスに追加しただけですから,今回のサンプル・プログラムのメインルーチンはきわめて分かりやすくなっています。お時間のあるときにぜひ確認してみてください。

 第26回で説明したように,Windowsにはいろいろな種類のサービスが用意されています。特定のサービスに関する情報を収集,表示させたい場合,そのサービスを選択する条件を設定する必要があります。例えば,無効となっているサービスの情報を収集したい場合には,次のような条件を設定します。

If CBool(ucase(oObject_2.StartMode) = ucase("Disabled"))

 ソースコード内にはその他の条件も記述されていますから,お時間のあるときに参考にしてください。サービスの種類と設定する条件の詳しい説明については,第26回を復習しておいてください。

 それでは,Excelへの表示を担当しているソースコード部分を説明しましょう。筆者はExcel初心者であることもあり,次の6個のオブジェクトの使い方をまずマスターすることを心がけています。なによりも基本が大切,というわけです。

  • Applicationオブジェクト
  • Workbooksオブジェクト
  • Workbookオブジェクト
  • Worksheetsオブジェクト
  • Worksheetオブジェクト
  • Cellsオブジェクト

図4●Excelが生成したHTMLファイルのソースコード
図5●HTMLファイルのソースコードに変更を加える
 Excelには,シート情報をHTMLファイル化する機能があります。この機能を活用し,作成されたHTMLファイルのソースコードを見てみると,図4[拡大表示]のような情報が含まれていることが分かります。

 この情報はXMLで表現され,3つのオブジェクト(Workbookオブジェクト,Worksheetsオブジェクト,Worksheetオブジェクト)の関係をはっきり説明しています。結論を先に言うと,Excelシート上に情報を表示し,かつ,その表示内容に変化をつけたい場合,Worksheetオブジェクトを理解し,その性質(プロパティとメソッド)をうまく活用することが基本となります。筆者はこの線に沿って,図5[拡大表示]のような手順で表示内容に変化をつけてみました。

 このソースコードでは,Cellsオブジェクトへの参照をoRange変数に設定しています(図5[拡大表示]の(1))。筆者は,ExcelのRangeの意味をよく理解できませんでしたが,いろいろ経験しているうちに,「Excelでは,おそらく,1つ以上のセルの集合をRangeと呼んでいるに違いない」,と推測しました。この推測はきわめて幼稚なものですが,Excelをまったく知らない筆者にとってはたいへん重要なことでした。

 初心者というのは,経験者が想像もつかないようなところに疑問を持ち,つまずいてしまうものです。コードを実際に動かしてみると,希望する結果が得られましたから,推測が正しかったことが分かります。Rangeの使い方だけではなく,その意味さえ分かれば,自由かつ柔軟に使えるようになります。次回はRangeオブジェクトの異なる使い方を紹介する予定です。今回紹介した実装コードはかなり遅いような印象を受けます。どの程度改善されるのか楽しみなところです。

 ソースコード内では,いろいろなプロパティや他のオブジェクトが使われています。筆者は,それらの技術情報はExcelの「マクロ記録」機能を使って取得しています。例えば,マクロ機能を使用すると,次のようなプログラミング情報が得られます。

With Selection.Font
.Name = "MS Pゴシック"
.FontStyle = "太字"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
End With
With Selection.Interior
.ColorIndex = 24
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With

 このマクロコードの活用方法は以降の連載で詳しく説明する予定です。結論を先に言うと,先に紹介した6個の基本オブジェクトを理解していれば,マクロ記録情報を簡単に活用できます。何よりも基本が大切です。さらに,Excelのオブジェクト階層情報に目を通してみると,このようなマクロコードをExcel外部から直接呼び出して実行することは意外に簡単なようです。以降の連載では,マクロの外部呼出し方法も紹介してみたいと思います。

今回のまとめ

  • SP2のサービス総数はSP1よりも増える可能性がある
  • 「通常のサービス」数は増えない可能性がある
  • Excelにはマクロ記録機能がある
  • マクロ記録機能は多くのプログラミング情報を提供してくれる

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!