COMオブジェクト

本ページには広告が含まれています。

COMオブジェクトとは、Microsoftが開発したComponentコンポーネント Objectオブジェクト ModelモデルCOMコム)と呼ばれる技術を使用して作成されたオブジェクトのことを指します。COMオブジェクトは、Windowsプラットフォームで動作し、他のアプリケーションやプログラムから利用することができます。

UWSCでは以下のように記述することで呼び出して利用することができるようになります。

UWSC
Object = CREATEOLEOBJ( COMオブジェクト名 )
InternetExplorer オブジェクト
Webブラウザ、Internet Explorerの機能をプログラムから制御するために使用されるオブジェクトです。Webページのロード操作フレームのナビゲーションフォームの入力テキストの検索など、様々なWebページ操作をプログラムから自動的に実行することができます。
Shell オブジェクト
Windowsシェルの機能をプログラムから制御するために使用されるオブジェクトです。Shellオブジェクトを使用することで、ファイルのコピー、削除、移動、作成、名前の変更、フォルダの操作など、Windows上での様々なファイル操作をプログラムから自動的に実行することができます。
CDO オブジェクト
Microsoft Exchange ServerとMicrosoft Outlookとの間でメールや予定表などの情報を共有するために使用されるオブジェクトです。CDOオブジェクトを使用することで、メールの送受信、予定表の操作、タスクの管理、連絡先の管理など、Exchange ServerおよびOutlookの機能をプログラムから制御することができます。
FileSystemObject オブジェクト
ファイルやフォルダを操作するためのオブジェクトです。FileSystemObjectオブジェクトは、ファイル操作に必要な機能を提供するため、ファイルの読み取りや書き込み、フォルダの作成や削除、ファイルの属性の取得や設定などの操作が可能です。
WshShell オブジェクト
WshShellオブジェクトは、Windows Script Host(WSH)環境で使用することができるオブジェクトの一つで、Windowsのシェルを制御するための機能を提供します。WshShellオブジェクトは、ファイル・コマンドプロンプトによるコマンド・レジストリの操作などを行うことができます。
Excel オブジェクト
Excelオブジェクトは、Excelアプリケーション内のさまざまなオブジェクト(ブック、シート、セルなど)にアクセスするための手段を提供します。
Word オブジェクト
Wordオブジェクトは、Wordアプリケーション内のさまざまなオブジェクト(ドキュメント、節、段落、文字列など)にアクセスするための手段を提供します。
Outlook オブジェクト
Outlookオブジェクトは、Outlookアプリケーション内のさまざまなオブジェクト(メール、タスク、スケジュールなど)にアクセスするための手段を提供します。
Selenium オブジェクト
Seleniumは、Webドライバーと呼ばれるブラウザ専用のコンポーネントを使用して、Webページを開き、要素をクリックしたり、テキストを入力したり、ページの内容を取得したりすることができます。WebDriverを介してChrome、Edge、Firefox、Internet Explorerなどの主要ブラウザを操作することができます。

用語説明

以下の項目はExcelで解説していますが、基本的には他も同じです。

オブジェクト

オブジェクトとは、操作を指示するときの操作対象のことをいいます。Excelの場合、ワークブックワークシートセルセル範囲などを指します。

オブジェクトは階層構造で管理されています。例えば、A1セルを指定するとき以下のように記述するとアクティブシートのセルA1を表します。

UWSC
Excel.Range("A1")

他のシートやブックを指定したい場合は、上の階層に遡って上から順にオブジェクトを指定していく必要があります。

.png
UWSC
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Add()    // Book1を追加
Excel.Workbooks.Add()    // Book2を追加

// Book1のSheet2のセルA1に100を代入
Excel.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100

// アクティブブック(Book2)のSheet2のセルA1に200を代入
Excel.Worksheets("Sheet2").Range("A1").Value = 200

// アクティブブック(Book2)のアクティブシート(Sheet1)のセルA1に300を代入
Excel.Range("A1").Value = 300

7行目の100を代入しているプログラムについて構造の解説。

UWSC
Excel.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100

最上位のApplicationオブジェクトから省略せずに書くと以下のようになります。

UWSC
Excel.Application.Workbooks("Book1").Worksheets("Sheet2").Range("A1").Value = 100

これをできる限り分割して最小単位で記述すると、以下のようになります。

UWSC
DIM Application = Excel.Application         // Applicationオブジェクト = Excel.Appliationプロパティ
DIM Workbooks = Application.Workbooks       // Workbooksコレクション = Applicationオブジェクト.Workbooksプロパティ
DIM Workbook = Workbooks.Item("Book1")      // Workbookオブジェクト = Workbooksコレクション.Itemプロパティ
DIM Worksheets = Workbook.Worksheets        // Worksheetsコレクション = Workbookオブジェクト.Worksheetsプロパティ
DIM Worksheet = Worksheets.Item("Sheet2")   // Worksheetオブジェクト = Worksheetsコレクション.Itemプロパティ
DIM Range = Worksheet.Range("A1")           // Rangeオブジェクト = Worksheetオブジェクト.Rangeプロパティ
Range.Value = 100                           // Rangeオブジェクト.Valueプロパティ

コレクション

開いているすべてのブックブック内のすべてのワークシートなどオブジェクトの集合のことをコレクションといいます。

例えば、Workbookオブジェクトの集合は「Workbooksコレクション」、Worksheetオブジェクトの集合は「Worksheetsコレクション」となります。通常コレクション名は、オブジェクト名に複数形の「s」が付いたものになります。またコレクションはオブジェクトがいくつあるかを取得するためCountプロパティ、単一のオブジェクトを取得するためのItemメソッドまたはItemプロパティを持っています。

コレクションから単一のオブジェクトを取得

コレクションはオブジェクトの集まりで単一のオブジェクトを取得するには、ItemメソッドまたはItemプロパティを使います。

UWSC
オブジェクト名.Item(インデックス番号)
オブジェクト名.Item(名前)

Itemは省略することができ、オブジェクト名の後ろに( )をつけ、インデックス番号または名前を直接指定することができます。

UWSC
オブジェクト名(インデックス番号)
オブジェクト名(名前)

例えばWorkbooksコレクションの1番目を取得する場合、以下の2通りの書き方があります。

UWSC
Workbook = Workbooks.Item(1)
Workbook = Workbooks(1)

すべてのオブジェクトに対して操作を行うにはFOR-TO-NEXT文でItemにインデックス番号を1〜コレクションの数まで回すか、FOR-IN-NEXTで各オブジェクトにアクセスします。

UWSC
DIM Worksheets = Excel.Worksheets

FOR i = 1 TO Worksheets.Count
	DIM Worksheet = Excel.Worksheets.Item(i)
	PRINT Woksheet.Name
NEXT

FOR Worksheet IN Worksheets
	PRINT Worksheet.Name
NEXT

メソッド

メソッドとは、オブジェクトに対して動作を指示するときに使う「命令」を示すものです。例えばセルA1を選択するコピーする削除するなどの動作を命令するときに使います。

引数ひきすうを指定するには、メソッド名のあとに半角の( )(括弧)の中に引数を記述します。引数が必要ないものは括弧も記述する必要ありません。

書式
オブジェクト.メソッド([引数])

引数が複数ある場合は、引数毎に,(カンマ)で区切って記述します。

書式
オブジェクト.メソッド([引数1,引数2,…])

ExcelのVBAでは引数の内容を順番通りに指定する方法名前付き引数というメソッドを呼び出すときにどの引数にどの値を渡すのかを名前で指定できる方法があります。

順番通りに引数を指定

以下はワークシートを3個追加する例。追加するシートを指定するのは引数3なので引数1、引数2を省略。省略する引数にはEMPTYPARAMを指定することができます。

UWSC
Excel.Worksheets.Add(,, 3)
UWSC
Excel.Worksheets.Add(EMPTYPARAM, EMPTYPARAM, 3)
名前を指定して引数を指定

名前を指定して引数を指定する場合は引数の名前:=値のように記述します。

UWSC
オブジェクト.メソッド(引数の名前:=値)

以下は名前付き引数でワークシートを3枚追加する例です。

UWSC
Excel.Worksheets.Add(Count:=3)

以下はワークブックを開く書き方。

UWSC
Excel.Workbooks.Open(FileName:="D:\Desktop\Book1.xlsx", ReadOnly:=TRUE)

引数の名前は大文字・小文字の区別はなく、順番も若い順である必要はありません。以下は第三引数(ReadOnly)、第一引数(FileName)の順で指定しています。

UWSC
Excel.Workbooks.Open(readonly:=TRUE, filename:="D:\Desktop\Book1.xlsx")

プロパティ

プロパティとは、オブジェクトの特徴や性質などを示すものです。例えばセルの内容を表すRange オブジェクトのプロパティには、セルの内容を表すRange.Value プロパティ (Excel)、行番号を表すRange.Row プロパティ (Excel)、列番号を表すCOM.COM (Excel)などがあります。

プロパティはオブジェクトの状態を決める項目のことで、オブジェクト毎に使えるプロパティは決まっています。Workbookオブジェクトのプロパティ、Worksheetオブジェクトのプロパティ、Rangeオブジェクトのプロパティのようにそれぞれ固有のプロパティがあります。

プロパティの値を取得する

プロパティの値を取得するときは、オブジェクト名とプロパティ名を.(ピリオド)で区切って書きます。

書式
オブジェクト.プロパティ

以下はセルA1の内容を取得します。

記述例
Excel.Range("A1").Value

値を取得するだけでは内容が確認できないので、変数に代入したりPRINT文で出力したりということが必要になります。

UWSC
DIM str = Excel.Range("A1").Value
PRINT Excel.Range("A1").Value
プロパティの値を指定する

プロパティの値を設定するときは、オブジェクト名とプロパティ名をピリオドで区切って書き、=(イコール)のあとに設定値を書きます。ここでのイコールは代入演算子と呼ばれ、左辺と右辺が等しいという意味の等号とは意味が違うので注意してください。左辺 = 右辺と記述することで右辺の内容を左辺に代入するという意味になります。

書式
オブジェクト.プロパティ = 値

以下はセルA1の内容に100を設定します。

記述例
Excel.Range("A1").Value = 100

セルA1にセルB1の内容を代入します。

UWSC
Excel.Range("A1").Value = Excel.Range("B1").Value

なお、プロパティは様々な種類がありますが、中には値の取得しかできないプロパティもあります。このようなプロパティを読み取り専用プロパティといいます。例えばシートの数を取得するCOM.COM (Excel)は値の取得のみが可能です。

以下のように書くとワークシートの数を取得しnに代入されます。

UWSC
DIM n = Worksheets.Count

しかし、以下のように代入しようとしてもシートの数が5枚になるわけではありません。

UWSC
Worksheets.Count = 5

既定プロパティ

既定プロパティとは、オブジェクトの記述だけで参照できるプロパティのことです。通常オブジェクト.プロパティと記述するところ、プロパティを省略してオブジェクトだけでプロパティの値を取得することができます。

UWSC
PRINT Excel.Range("A1").Value

Rangeオブジェクトの既定プロパティはValueプロパティなので以下のようにValueを省略することができます。

UWSC
PRINT Excel.Range("A1")

当サイトでは省略された既定プロパティは_Defaultと記載しています。

UWSC
Range.[_Default](RowIndex, ColumnIndex)

参考文献

  1. UWSCとSeleniumBasicでChromeブラウザを操作する│自動化・効率化ならKTパソコンスクール