初めて投稿させて頂きます。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;
環境を書き忘れておりました。
・Delphi6 Professional
・Windows XP Professional
・Office XP Personal
です。よろしくお願い致します。
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を選択
にしの様 ご回答ありがとうございます。
ご教授頂いた方法で希望の動きをすることができました。
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;
ツイート | ![]() |