TExcelWorkSheetのOnChangeイベントは、
右クリック→行挿入や行削除の場合に
イベントが発生しません。
行挿入や行削除をしたときに計算式を
変更するなどの処理を入れたいのですが、
何か良い方法がありますでしょうか?
環境は、
Delphi5+WindowsXP(SP2)です。
>右クリック→行挿入や行削除の場合に
少なくとも右クリック→行削除ではイベントが発生すると思います。
procedure TForm1.ExcelWorksheet1Change(Sender: TObject;
begin
ShowMessage('OnChange');
end;
Delphi5+WindowsXPで試しました。
右クリック→行削除でイベントが発生しない場合の、そちらのExcelシート上
のデータ配置・削除手順等を説明してください。
>行挿入や行削除をしたときに計算式を変更するなどの処理を入れたい
ここでやりたい事をもう少し明確にすれば、適切なレスがつくかもしれません。
「Delphi側からExcelの計算式を変更する」事は既にできているわけですよね?
すみません。
確認不足でした。
行削除では、イベントが発生しました。
行挿入でやりたいことは、
挿入したタイミングで空白の行ができるのではなく、
1つ上の行の内容がコピーされるようにしたいのです。
エクセルで行のコピー、コピーした行の挿入でも
できますが、その操作を行挿入でもできれば・・・
こういったことは、難しいのでしょうか?
疑問1:エクセルで行のコピー、コピーした行の挿入。で十分では?
疑問2:エクセルのマクロで十分では?
疑問3:各局、Delphiで何がやりたいのか?
今ひとつよくわからないが、こういう事かな?(一応動作確認済み)
procedure TForm1.Button1Click(Sender: TObject);
var
orig1, orig2, dup1, dup2 : string;
CurrentRow, PriorRow : Integer;
begin
CurrentRow := ExcelApplication1.ActiveCell.Row; //現在の行を取得
if CurrentRow > 1 then
begin
PriorRow := CurrentRow-1;
orig1 := 'A' + IntToStr(CurrentRow); //現在の行頭
orig2 := 'IV' + IntToStr(CurrentRow); //行末(これは'IV'ではなく、自分で取得したほうが良い?)
//ExcelApplication1.ActiveCell.CurrentRegion.Rows.Columns.Count;とか?
dup1 := 'A' + IntToStr(PriorRow); //1つ上の行頭
dup2 := 'IV' + IntToStr(PriorRow); //行末
ExcelWorksheet1.Range[orig1, orig2].EntireRow.Insert(xlShiftDown); //1行挿入
ExcelWorksheet1.Range[dup1, dup2].Copy(ExcelWorksheet1.Range[orig1, orig2]); //上の行をコピー
end;
end;
・・・これが何の役に立つんだろう?
・・・質問者がやりたい事とは全然違っているほうに50000エクセル。
あと、これはセル単位コピーなので、行単位コピーのわかる方、フォローをお願いします。
ツイート | ![]() |