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 によるエクセル操作の例.検索ダイアログの表示
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 によるエクセル操作の例.検索ダイアログの表示
var
  objExcelApp : OleVariant;
begin
  objExcelApp := xlfExcelApp.Application;
  objExcelApp.CommandBars.ExecuteMso('FindDialogExcel');

  //これがないと正常に動作しない場合がある
  xlfSetFocusExcel;
end;




Dialogs オブジェクトによるダイアログの表示


ダイアログに限って言えば,Dialogs オブジェクトの各 Item であるダイアログオブジェクトで表示できます.
ダイアログオブジェクトの Show メソッドでダイアログを表示しますが,引数で,ダイアフログを表示する際の初期値の設定,または,ダイアログを閉じた時の値の取得が可能な場合があります.
次も,上のサンプルと同じ検索ダイアログを表示する例です.検索の初期値を 100 としています.


図2
Dialog オブジェクトを使用

リスト3
Dialog オブジェクトの Show メソッドでダイアログを表示
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;