DelphiからExcelの複数シートを選択するには?

解決


Shinya  2003-10-07 03:26:13  No: 5123

初めて投稿させて頂きます。Delphi初心者のShinyaと申します。

DelphiからExcelのシートを複数選択する方法で躓いております。
ExcelのシートがSheet1からSheet5まであると仮定します。

一つのシートを選択する場合は
  ExcelWB.Sheets['Sheet1'].Select

単純に全シートを選択する場合は
  ExcelWB.Sheets.Select

でできたのですが
  ①Sheet1とSheet3  
  ②Sheet1〜Sheet3
といった選択の仕方ができなくて困っております。

Excelのマクロのソースを見てみると
  ① Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
  ② Sheets(Array("Sheet1", "Sheet3")).Select
となっておりますので素人考えで
  ① ExcelWB.Sheets[Array["Sheet1","Sheet2","Sheet3"]].Select
  ② ExcelWB.Sheets[Array["Sheet1","Sheet3"]].Select
とするとArrayでエラー(当たり前ですが)になります。
他にも
     ExcelWB.Sheets['Sheet1','Sheet3'].Select
など色々試してみましたがエラーが出てしまいます。

HP等で調べてみたのですが方法が見つからず大変困っております。
識者の方、是非ともご教授下さい。
よろしくお願い致します。

以下簡単なソースを表示致します。

var
  Excel,ExcelApp,ExcelWB  : Variant;

begin
  Excel    := CreateOleObject('Excel.Application');
  ExcelApp := Excel.Application;
  ExcelApp.WorkBooks.Open('c:\Book1.xls');
  ExcelWB  := ExcelApp.ActiveWorkbook;

  //Sheet1からSheet3を選択した状態にしたい。
  ExcelWB.Sheets[       ].Select;  ←ここの指定がうまくいかずエラーが出ます。
  ExcelApp.Visible := true;
end;


Shinya  2003-10-07 03:30:25  No: 5124

環境を書き忘れておりました。
・Delphi6 Professional
・Windows XP Professional
・Office XP Personal
です。よろしくお願い致します。


にしの  2003-10-07 17:54:32  No: 5125

Variantで配列を指定すればよろしいかと思います。

var
  SheetsName: Variant;
begin

....

  //Sheet1からSheet3を選択した状態にしたい。
  SheetsName := VarArrayCreate([0, 2], varVariant); // Variant配列を作成
  SheetsName[0] := 'Sheet1';
  SheetsName[1] := 'Sheet2';
  SheetsName[1] := 'Sheet3';
  ExcelWB.Sheets[SheetsName].Select; // Sheet1, Sheet2, Sheet3を選択


Shinya  2003-10-07 18:54:19  No: 5126

にしの様  ご回答ありがとうございます。
ご教授頂いた方法で希望の動きをすることができました。
VarArrayCreateという関数の存在を初めて知りました。
HELP等でもっと勉強していきたいと思います。
この度はありがとうございました。

以下動作したソースを記述致します。

var
  Excel,ExcelApp,ExcelWB,SheetsName  : Variant;
begin
  Excel    := CreateOleObject('Excel.Application');
  ExcelApp := Excel.Application;
  ExcelApp.WorkBooks.Open('c:\Book1.xls');
  ExcelWB  := ExcelApp.ActiveWorkbook;
  
  //Sheet1からSheet3を選択した状態にする場合
  SheetsName    := VarArrayCreate([0, 2], varVariant); 
  SheetsName[0] := 'Sheet1';
  SheetsName[1] := 'Sheet2';
  SheetsName[2] := 'Sheet3';

  //Sheet1とSheet3を選択した状態にする場合
  SheetsName    := VarArrayCreate([0, 1], varVariant); 
  SheetsName[0] := 'Sheet1';
  SheetsName[1] := 'Sheet3';

  ExcelWB.Sheets[SheetsName].Select;

  ExcelApp.Visible := true;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加