- PR -

Excelのプレビュー画面表示中に、バックのフォームを再描画する方法

1
投稿者投稿内容
kurage
会議室デビュー日: 2006/10/28
投稿数: 12
投稿日時: 2006-11-22 09:45
フォーム上のボタンがクリックされると、
Excelのオブジェクトを作成し、プレビュー画面を表示する処理を作っています。

ところが、プレビュー画面表示中は、フォームが再描画されないので
フォームの表示が汚くなってしまいます。
これを回避する(再描画する)方法をご存知の方がおられましたら、ご教示ください。
よろしくお願い致します。


◆プレビュー画面を表示する部分のソースコード(C#)

// Excelを起動する
Excel.Application app = new Excel.Application();
app.Visible = false;

// ブックを開く
Excel.Workbook workbook = app.Workbooks.Open
  (ブックのパス,
  0, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
  Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];

// 印刷プレビュー画面を表示する
app.Visible = true;
worksheet.PrintPreview(false);
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-22 10:10
引用:

kurageさんの書き込み (2006-11-22 09:45) より:

フォーム上のボタンがクリックされると、
Excelのオブジェクトを作成し、プレビュー画面を表示する処理を作っています。
(snip)
// 印刷プレビュー画面を表示する
app.Visible = true;
worksheet.PrintPreview(false);


そもそも、Excel.Worksheet.PrintPreview メソッドは、
印刷プレビューを表示するためのメソッドではありません。
Worksheet の表示モードを '改ページ プレビュー' に切り替えるメソッドです。

仮に、"印刷プレビュー" が 「改ページ プレビュー」 の間違いだとして、
PrintPreview メソッドのせいで、フォームが描画がされなくなることはありません。

他の要因があるということになります。

引用:

Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];


本題と関係ないところですが、System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドで、
Excel.Worksheets の参照カウントをデクリメントする機会を失っています。

Office PIA を利用する場合はご注意ください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kurage
会議室デビュー日: 2006/10/28
投稿数: 12
投稿日時: 2006-11-22 10:26
じゃんぬねっとさん、ご回答ありがとうございます。

引用:

そもそも、Excel.Worksheet.PrintPreview メソッドは、
印刷プレビューを表示するためのメソッドではありません。
Worksheet の表示モードを '改ページ プレビュー' に切り替えるメソッドです。



再度確認してみたのですが、
Excel.Worksheet.PrintPreviewで、(改ページプレビューではなく)
印刷プレビュー画面が表示されております。

なお、改ページプレビューは、ExcelVBAのマクロを書き出してみたところ
ActiveWindow.View = xlPageBreakPreview ←改ページプレビューに変更
ActiveWindow.View = xlNormalView    ←標準に戻す
というソースが書き出されておりました。

引用:

仮に、"印刷プレビュー" が 「改ページ プレビュー」 の間違いだとして、
PrintPreview メソッドのせいで、フォームが描画がされなくなることはありません。

他の要因があるということになります。



他の要因について、もし想像できる要因がございましたら、
お教えいただけるとありがたく存じます。

引用:

本題と関係ないところですが、System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドで、
Excel.Worksheets の参照カウントをデクリメントする機会を失っています。

Office PIA を利用する場合はご注意ください。



了解いたしました。ご指摘ありがとうございます。
kurage
会議室デビュー日: 2006/10/28
投稿数: 12
投稿日時: 2006-11-22 10:26
じゃんぬねっとさん、ご回答ありがとうございます。

引用:

そもそも、Excel.Worksheet.PrintPreview メソッドは、
印刷プレビューを表示するためのメソッドではありません。
Worksheet の表示モードを '改ページ プレビュー' に切り替えるメソッドです。



再度確認してみたのですが、
Excel.Worksheet.PrintPreviewで、(改ページプレビューではなく)
印刷プレビュー画面が表示されております。

なお、改ページプレビューは、ExcelVBAのマクロを書き出してみたところ
ActiveWindow.View = xlPageBreakPreview ←改ページプレビューに変更
ActiveWindow.View = xlNormalView    ←標準に戻す
というソースが書き出されておりました。

引用:

仮に、"印刷プレビュー" が 「改ページ プレビュー」 の間違いだとして、
PrintPreview メソッドのせいで、フォームが描画がされなくなることはありません。

他の要因があるということになります。



他の要因について、もし想像できる要因がございましたら、
お教えいただけるとありがたく存じます。

引用:

本題と関係ないところですが、System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドで、
Excel.Worksheets の参照カウントをデクリメントする機会を失っています。

Office PIA を利用する場合はご注意ください。



了解いたしました。ご指摘ありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-22 11:55
引用:

kurageさんの書き込み (2006-11-22 10:26) より:

再度確認してみたのですが、Excel.Worksheet.PrintPreviewで、(改ページプレビューではなく) 印刷プレビュー画面が表示されております。


寝ぼけておりました。
おっしゃるとおりですね、ごめんなさい。(*_ _)

解決策としましては、Form 描画用の別スレッドを用意するという方法があります。
しかしながら、Form を一旦非表示にするのが、最も適切かもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kurage
会議室デビュー日: 2006/10/28
投稿数: 12
投稿日時: 2006-11-23 01:54
フォーム描画用の別スレッドを用意する方法で、解決することができました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)