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

解決


すれいぶ  2004-12-09 14:21:44  No: 12212

環境はDelphi6 + EXCEL2000です。

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

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

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


HOta  2004-12-09 17:07:12  No: 12213

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


Mr.XRAY  URL  2004-12-09 17:33:02  No: 12214

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


すれいぶ  2004-12-09 23:09:48  No: 12215

現状は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

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

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


Mr.XRAY  URL  2004-12-10 06:02:43  No: 12217

>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

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


すれいぶ  2004-12-10 23:42:02  No: 12219

ありがとうございます!

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

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


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

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






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