お世話になります。
Windows2000
Delphi5
既存のExcelファイルに書き込みを行っています。
(シートは1〜3で、シート2がアクティブな状態で保存されています)
procedure TForm1.Button1Click(Sender: TObject);
var
OpenFileName: String;
Excel: Variant;
Application: Variant;
WorkBook: Variant;
WorkSheet: Variant;
begin
OpenFileName := 'c:\test.xls';
Excel := CreateOleObject('Excel.Application');
Application := Excel.Application;
Application.Visible := false;
Application.WorkBooks.Open(FileName := OpenFileName, readOnly := false);
WorkBook := Application.ActiveWorkbook;
WorkSheet := Application.ActiveSheet;
//シート3に書き込む
WorkSheet := WorkBook.WorkSheets[3];
WorkSheet.Cells[2,3].Value := 'test';
//シート1をアクティブにする
WorkSheet := WorkBook.WorkSheets[1]; // ← ●?
WorkBook.Save; //上書き保存
Application.WorkBooks.Close;
Excel.Quit;
end;
保存されたファイルを開くと
操作前と同様にシート2がアクティブな状態で保存されています。
これをシート1をアクティブにした状態で保存させたいのですが
どのようにすればよいのかどなたかご教授お願いします。
>保存されたファイルを開くと
>操作前と同様にシート2がアクティブな状態で保存されています。
>これをシート1をアクティブにした状態で保存させたいのですが
開いた時にシート1をアクティブにするんじゃダメなんですか?
シート3が見えてからシート1になるのが体裁悪ければ,
非表示にして,シート1をアクティブにしてらか表示するとか...
> 開いた時にシート1をアクティブにするんじゃダメなんですか?
> シート3が見えてからシート1になるのが体裁悪ければ,
> 非表示にして,シート1をアクティブにしてらか表示するとか...
Delphiで開くならOKでしょうが、Excelで開いたときにはマクロを用意しないと駄目ですよね。
WorkSheet := Application.ActiveSheet;
として、
//シート1をアクティブにする
WorkSheet := WorkBook.WorkSheets[1]; // ← ●?
としても、ActiveSheetは変更されませんよ。
単純に、WorkSheetにWorkBook.WorkSheets[1]が代入されるだけです。
Application.ActiveSheet := WorkBook.WorkSheets[1];
では駄目でしょうか。
# 未確認です
気になったのですが、グローバル変数にApplicationがありますが、Applicationというローカル変数を用意すると、ネームスペースから指定しないとグローバル変数Applicationが使えません。今のところは問題ないと思いますが。
できるだけ、使用頻度の高いグローバル変数と同じ名前のローカル変数を使うことはさけた方がよいです。
Mr.XRAYさん、にしのさん、ありがとうございます。
> Mr.XRAYさん
にしのさんがおっしゃる通りな感じで、
Delphiで保存したExcelファイルを普通に開いた時に
シート1がアクティブになっているようにしたい次第なのです。
> にしのさん
WorkSheet := WorkBook.WorkSheets[1];
の意味を取り違えていました。
変数なども変えて下記のようにしました。
(Windows2000, Delphi5, Excel2000 SP3)
procedure TForm1.Button1Click(Sender: TObject);
var
OpenFileName: String;
Excel: Variant;
WorkBook: Variant;
WorkSheet: Variant;
begin
OpenFileName := 'c:\test.xls';
Excel := CreateOleObject('Excel.Application');
Excel.Visible := false;
Excel.WorkBooks.Open(FileName := OpenFileName, readOnly := false);
WorkBook := Excel.ActiveWorkbook;
WorkSheet := Excel.ActiveSheet;
//シート3に書き込む
WorkSheet := WorkBook.WorkSheets[3];
WorkSheet.Cells[2,3].Value := 'test';
//シート1をアクティブにする
Excel.ActiveSheet := WorkBook.WorkSheets[1]; // ← ●
WorkBook.Save; //上書き保存
Excel.WorkBooks.Close;
Excel.Quit;
end;
すると、「メンバが見つかりません」というメッセージが出てしまいます。。
Webなどでも調べたのですがわかりませんでした。
どうかご教授をお願いします。
Excel.WorkSheets[1].Activate;
では?
kazuさん、ありがとうございます。
できました!
Activate を使うのですね。
勉強になります。
Mr.XRAYさん、にしのさん、kazuさん
どうもありがとうございました。
ツイート | ![]() |