Delphi Programming / Object Pascal
[掲載 2010年08月29日] [更新 2013年12月12日] エクセル操作フォームEx
エクセル操作フォームEx 参考コード類
コマンド ID やコントロール ID によるエクセルの操作
動作確認等
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010
コマンド ID ( CommandBar ID ) による操作
エクセル操作フォームEx は Excel2000.pasの機能を使用しています.当然 Excel 2007 以降に追加された機能は使用できませんが,Commandbars IDを使用すると新しい機能も実行できます.
エクセルを含め,Office 製品のメニューとコマンドバーの各ボタン,リボンコントロールの各コントロールには,コマンド ID と呼ばれる番号が割当ててあります.これを使用します.この ID 値のリストは以下のページで入手することができます.CommandBars ID を使用するとバージョンに関係なくコマンドを実行できますが.その機能をサポートしていないバージョンでは例外が発生します.
次のコードは検索ダイアログを表示する例です.
コマンド ID は,CommandBars オブジェクトの FindControl メソッドの引数で指定します.
図1
コマンド ID で検索ダイアログ
リスト1
コマンド ID によるエクセル操作の例.検索ダイアログの表示
copy code
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
pType : OleVariant;
pID : OleVariant;
pTag : OleVariant;
pVisible : OleVariant;
begin
// これがないと正常に動作しない場合がある
xlfSetFocusExcel;
pType := EmptyParam;
pID := 1849 ;
pTag := EmptyParam;
pVisible := EmptyParam;
try
xlfExcelApp.CommandBars.FindControl(pType, pID, pTag, pVisible).Execute;
except
end ;
end ;
コントロール ID ( ExecuteMso ) による操作
コマンド ID とは別にコントロール ID というのもあります.
コントロール ID は,CommandBars オブジェクトの ExecuteMso メソッドの引数で指定します.この引数はコマンド ID を示す文字列です.
下のコードは,上のサンプルと同じ検索ダイアログを表示します.
図2
コントロール ID で検索ダイアログ
リスト2
コントロール ID によるエクセル操作の例.検索ダイアログの表示
copy code
var
objExcelApp : OleVariant;
begin
objExcelApp := xlfExcelApp.Application;
objExcelApp.CommandBars.ExecuteMso('FindDialogExcel' );
// これがないと正常に動作しない場合がある
xlfSetFocusExcel;
end ;
Dialogs オブジェクトによるダイアログの表示
ダイアログに限って言えば,Dialogs オブジェクトの各 Item であるダイアログオブジェクトで表示できます.
ダイアログオブジェクトの Show メソッドでダイアログを表示しますが,引数で,ダイアフログを表示する際の初期値の設定,または,ダイアログを閉じた時の値の取得が可能な場合があります.
次も,上のサンプルと同じ検索ダイアログを表示する例です.検索の初期値を 100 としています.
図2
Dialog オブジェクトを使用
リスト3
Dialog オブジェクトの Show メソッドでダイアログを表示
copy code
procedure TplExcelFormEx1.Button3Click(Sender: TObject);
var
pIndex : OleVariant;
AItem : OleVariant;
begin
pIndex := xlDialogFormulaFind;
try
AItem := xlfExcelApp.Dialogs.Item[pIndex];
AItem.Show(Arg1 := '100' );
except
raise ;
end ;
// これがないと正常に動作しない場合がある
xlfSetFocusExcel;
end ;