- - PR -
Excelのプレビュー画面表示中に、バックのフォームを再描画する方法
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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); | ||||||||||||
|
投稿日時: 2006-11-22 10:10
そもそも、Excel.Worksheet.PrintPreview メソッドは、 印刷プレビューを表示するためのメソッドではありません。 Worksheet の表示モードを '改ページ プレビュー' に切り替えるメソッドです。 仮に、"印刷プレビュー" が 「改ページ プレビュー」 の間違いだとして、 PrintPreview メソッドのせいで、フォームが描画がされなくなることはありません。 他の要因があるということになります。
本題と関係ないところですが、System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドで、 Excel.Worksheets の参照カウントをデクリメントする機会を失っています。 Office PIA を利用する場合はご注意ください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-22 10:26
じゃんぬねっとさん、ご回答ありがとうございます。
再度確認してみたのですが、 Excel.Worksheet.PrintPreviewで、(改ページプレビューではなく) 印刷プレビュー画面が表示されております。 なお、改ページプレビューは、ExcelVBAのマクロを書き出してみたところ ActiveWindow.View = xlPageBreakPreview ←改ページプレビューに変更 ActiveWindow.View = xlNormalView ←標準に戻す というソースが書き出されておりました。
他の要因について、もし想像できる要因がございましたら、 お教えいただけるとありがたく存じます。
了解いたしました。ご指摘ありがとうございます。 | ||||||||||||
|
投稿日時: 2006-11-22 10:26
じゃんぬねっとさん、ご回答ありがとうございます。
再度確認してみたのですが、 Excel.Worksheet.PrintPreviewで、(改ページプレビューではなく) 印刷プレビュー画面が表示されております。 なお、改ページプレビューは、ExcelVBAのマクロを書き出してみたところ ActiveWindow.View = xlPageBreakPreview ←改ページプレビューに変更 ActiveWindow.View = xlNormalView ←標準に戻す というソースが書き出されておりました。
他の要因について、もし想像できる要因がございましたら、 お教えいただけるとありがたく存じます。
了解いたしました。ご指摘ありがとうございます。 | ||||||||||||
|
投稿日時: 2006-11-22 11:55
寝ぼけておりました。 おっしゃるとおりですね、ごめんなさい。(*_ _) 解決策としましては、Form 描画用の別スレッドを用意するという方法があります。 しかしながら、Form を一旦非表示にするのが、最も適切かもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-23 01:54
フォーム描画用の別スレッドを用意する方法で、解決することができました。
ありがとうございました。 |
1