環境はDelphi6 + EXCEL2000です。
WorkSheets.Addを実行すると先頭にシートが追加されてしまい、困っています。
Web上を検索しても、Delphiでの記述法はなく、途方に暮れています。
また、シートの移動や削除もDelphiでの記述が判りません。
どなたか、御知恵を貸しては頂けないでしょうか。
宜しく御願いします。
ExcelをOLEで使う場合は、ExcelのVBAの記述に基づきますので、
まず、Excel側で記述してみて、それをPascel側に移せばいけます。
元のApplicationで出来ないことは出来ません。
Excel2000 のVBAのヘルプでWorkSheetsオブジェクトコレクションのAdd
メソッドをみると,任意の位置に追加できるようですよ.
現状はusesにComObjを追加して、コーディングしています。
>>HOtaさん
Web上を調べてWorksheets.Add(After:=Worksheets("Sheet2"))という
書式は判ったんですが、色々試してもエラーで弾かれてしまっています…。
Mr.XRAYさんのサイトからVBAのヘルプの場所がわかりました。
これを見ると
expression.Add(Before, After, Count, Type)
ということなんですが、「Variant型の値を使用します」という部分が
理解できません…。
パラメータ名を指定するのは無理だと思います。
下記の記述だとAfterの指定が可能です。
Worksheets.Add(EmptyParam, Worksheets[Worksheets.Count]);
>expression.Add(Before, After, Count, Type)
>ということなんですが、「Variant型の値を使用します」という部分が
う〜ん,VBAのヘルプは,ちょっとわかにくいですね.
CreateOleObject('Excel.Application');
で作成したExcelオブジェクトに対してBasserさんからレスがありますが,
2番目の引数が,どのシートの後ろに追加するか,という指定です.
Basserさんのコードでは,現在のシート数番目のシートを指定しています
から,最後となるわけです.Variant型でとありますから,
var
ASheet : Variant;
と定義しておいて,
ASheet:=Worksheets[Worksheets.Count];
として,ASheetを使用する方法も使えます.参考までに,ComObjでは,
CoExcelApplication.Create
といったExcelオブジェクトの生成方法もあります.あまり使用されて
いないようですが...
すれいぶさん
Pascalでは配列は[]です。これがVBの場合と違ってきます。
関数の引数は、()です。気をつけてください。
ありがとうございます!
Basser、Mr.XRAY両氏のやり方を合わせてやってみたところ、
無事に最終ページに追加できました。
HOtaさん、Mr.XRAYさん、Basserさん、ありがとうございました。
ツイート | ![]() |