EXCELでのシートの追加時、末端に追加するには?

解決


すれいぶ  2004-12-09 14:21:44  No: 12212  IP: [192.*.*.*]

環境はDelphi6 + EXCEL2000です。

WorkSheets.Addを実行すると先頭にシートが追加されてしまい、困っています。
Web上を検索しても、Delphiでの記述法はなく、途方に暮れています。

また、シートの移動や削除もDelphiでの記述が判りません。

どなたか、御知恵を貸しては頂けないでしょうか。
宜しく御願いします。

編集    削除
HOta  2004-12-09 17:07:12  No: 12213  IP: [192.*.*.*]

ExcelをOLEで使う場合は、ExcelのVBAの記述に基づきますので、
まず、Excel側で記述してみて、それをPascel側に移せばいけます。
元のApplicationで出来ないことは出来ません。

編集    削除
Mr.XRAY  URL  2004-12-09 17:33:02  No: 12214  IP: [192.*.*.*]

Excel2000 のVBAのヘルプでWorkSheetsオブジェクトコレクションのAdd
メソッドをみると,任意の位置に追加できるようですよ.

編集    削除
すれいぶ  2004-12-09 23:09:48  No: 12215  IP: [192.*.*.*]

現状はusesにComObjを追加して、コーディングしています。

>>HOtaさん
Web上を調べてWorksheets.Add(After:=Worksheets("Sheet2"))という
書式は判ったんですが、色々試してもエラーで弾かれてしまっています…。


Mr.XRAYさんのサイトからVBAのヘルプの場所がわかりました。
これを見ると
expression.Add(Before, After, Count, Type)
ということなんですが、「Variant型の値を使用します」という部分が
理解できません…。

編集    削除
Basser  2004-12-10 01:29:36  No: 12216  IP: [192.*.*.*]

パラメータ名を指定するのは無理だと思います。
下記の記述だとAfterの指定が可能です。

Worksheets.Add(EmptyParam, Worksheets[Worksheets.Count]);

編集    削除
Mr.XRAY  URL  2004-12-10 06:02:43  No: 12217  IP: [192.*.*.*]

>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オブジェクトの生成方法もあります.あまり使用されて
いないようですが...

編集    削除
HOta  2004-12-10 20:29:38  No: 12218  IP: [192.*.*.*]

すれいぶさん
Pascalでは配列は[]です。これがVBの場合と違ってきます。
関数の引数は、()です。気をつけてください。

編集    削除
すれいぶ  2004-12-10 23:42:02  No: 12219  IP: [192.*.*.*]

ありがとうございます!

Basser、Mr.XRAY両氏のやり方を合わせてやってみたところ、
無事に最終ページに追加できました。

HOtaさん、Mr.XRAYさん、Basserさん、ありがとうございました。

編集    削除