DelphiでVBA操作時、改ページをいれるとスレッドが残る

解決


ラスカル  2012-10-31 02:26:46  No: 43294

いつもお世話になっております。

DelphiEx2+Excel2010にて帳票を作成しておりますが、改ページをいれるプログラムにて、スレッドが解放されず、困っています。

下記ソースを実行したところ、イベント内でExcelを格納した変数をunassignedしているにも関わらず、Excelのスレッドが解放されません。EXE終了後、スレッドは解放されます。

自力で調査をしたのですが、レイトバインドしたとき、PageBreakを実行するとこの現象が起こるらしいところまではわかったのですが、その先がわかりません。どなたがご存知の方がいらっしゃったら、ご教授願います。

↓以下、サンプルコード
procedure TForm1.Button1Click(Sender: TObject);
var
  vExcel : variant;  //Excel.Application
  bAlert : boolean;
begin

  vExcel := CreateOleObject('Excel.Application');

  bAlert := vExcel.DisplayAlerts;

  vExcel.DisplayAlerts := false;

  try
    vExcel.Visible := true;

    vExcel.WorkBooks.Add;

    //------------------------------------------
    // 問題のソースコード [PageBreakの追加]
    //  コメントアウトすると、スレッドが残らない
    //------------------------------------------
    vExcel.ActiveSheet.Range[vExcel.ActiveSheet.Cells[2,1],
                             vExcel.ActiveSheet.Cells[3,3]].PageBreak := true;

  finally
    vExcel.ActiveWorkBook.Close;
    vExcel.DisplayAlerts := bAlert;
    vExcel.quit;
    vExcel := unassigned;
  end;

end;


au  2012-10-31 19:26:21  No: 43295

ヘルプみると、PageBreakてRowsとかColumnsに対してxlPageBreakManualかxlPageBreakNoneを設定するってなってるんですけど。

A2:C3の範囲に対してPageBreakの設定て出来るんでしょうか?
後、PageBreakに設定するのはTreu/Falseじゃないようなので、なにがしかのエラーが起こってるのが原因でExcelが終了出来てないんじゃないでしょうか?

ttp://msdn.microsoft.com/en-us/library/office/ff193644.aspx


ラスカル  2012-10-31 22:30:08  No: 43296

レスありがとうございます。

ご指摘の通り、行に対して改造ページを設定することで、問題なく動作いたしました。これで回避できそうです。ありがとうございます。

[NG]vExcel.ActiveSheet.Range[vExcel.ActiveSheet.Cells[2,1],
                             vExcel.ActiveSheet.Cells[3,3]].PageBreak := true;
[OK]vExcel.ActiveSheet.Rows[4].PageBreak := true;

なお、PageBreakに関しては、True/Falseでもなぜか動くようです。

改ページの方法に関しては、以下のURLにVB.NETで同じような現象があるようで、メモリの解放の方法に問題があるようですが、Delphiで同様なやり方がわからず、困っていました。ただ、ご教授いただいた通り、メソッドの変更で対応したいと思います。ありがとうございました。

http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=3129&reno=3125&oya=3117&mode=msgview&page=1680


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

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






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