TExcelWorkSheetで行挿入のイベント


SAKURA  2007-06-11 19:58:37  No: 26588

TExcelWorkSheetのOnChangeイベントは、
右クリック→行挿入や行削除の場合に
イベントが発生しません。

行挿入や行削除をしたときに計算式を
変更するなどの処理を入れたいのですが、
何か良い方法がありますでしょうか?

環境は、
Delphi5+WindowsXP(SP2)です。


beagle  2007-06-12 20:34:22  No: 26589

>右クリック→行挿入や行削除の場合に
少なくとも右クリック→行削除ではイベントが発生すると思います。
procedure TForm1.ExcelWorksheet1Change(Sender: TObject;
begin
  ShowMessage('OnChange');
end;
Delphi5+WindowsXPで試しました。
右クリック→行削除でイベントが発生しない場合の、そちらのExcelシート上
のデータ配置・削除手順等を説明してください。
>行挿入や行削除をしたときに計算式を変更するなどの処理を入れたい
ここでやりたい事をもう少し明確にすれば、適切なレスがつくかもしれません。
「Delphi側からExcelの計算式を変更する」事は既にできているわけですよね?


SAKURA  2007-06-12 22:54:42  No: 26590

すみません。
確認不足でした。
行削除では、イベントが発生しました。

行挿入でやりたいことは、
挿入したタイミングで空白の行ができるのではなく、
1つ上の行の内容がコピーされるようにしたいのです。

エクセルで行のコピー、コピーした行の挿入でも
できますが、その操作を行挿入でもできれば・・・
こういったことは、難しいのでしょうか?


beagle  2007-06-13 02:15:06  No: 26591

疑問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エクセル。
あと、これはセル単位コピーなので、行単位コピーのわかる方、フォローをお願いします。


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

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






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