トップ回答者
excelvbaのプレビューで画面が見えない現象が発生します。

質問
回答
すべての返信
-
qoo_manさん、こんにちは。
プレビューを表示する場合、PrintPreviewメソッドとPrintOutメソッドがありますが、どちらをどのように使われているでしょうか?スクリプトを明示していただけるとよろしいかと…。
と思いましたが、どちらも使って試してみても、なかなかこのような症状を再現できませんでした。
無理にvbaを組んでこのようなプレビュー画面を作ろうと思えば作れますが、それであればqoo_mainさんが投稿されるわけはないのだから、変ですね。プレビューに関連するシステムファイル(どれかは存じません。)の不具合とかでしょうか。- 編集済み KokemomoYamamomo 2019年5月30日 7:10
-
qoo_manさん、こんにちは。
プレビューを表示する場合、PrintPreviewメソッドとPrintOutメソッドがありますが、どちらをどのように使われているでしょうか?スクリプトを明示していただけるとよろしいかと…。
蛇足ですが
Application.CommandBars.ExecuteMso "PrintPreviewFullScreen"
でも
同様のことができますね。VBAではなく通常の操作でも表示されないのでしょうか?
とりあえずプリンターやディスプレイのドライバーが最新で適切なものかを確認されてみてはいかがでしょうか?trapemiya さんが書かれているようにまずは、通常のコマンド実行でも再現するかどうかを
テストしてその結果も報告してください。
通常のコマンド実行でも同様なら VBA の問題ではなく別のところに問題があると思われます。
ちなみに、デフォルトではリボンにこのコマンドがないのでリボンやクイックアクセスツールバーに
印刷プレビュー (全画面表示) (PrintPreviewFullScreen) コマンドを追加してください。 -
qoo_manさん、こんばんは。
いろいろ試していて、ちょこっと再現できたので報告します。
ActiveSheet.PrintPreview でも、 ActiveSheet.PrintOut preview:=True でも、 Application.CommandBars.ExecuteMso "PrintPreviewFullScreen" でも同じでした。
プレビューが表示された際に、プレビューウィンドウの枠をドラッグして大きさを大きくしたり小さくしたり変更すると、大きさが大きくなったり小さくなったりの動作に応じてちらちらと小刻みに再描画がされますが、その合間に、掲載されたような灰色の長方形の画像がちらちらと表示されます。ただし、ちらちらと表示されますが、停止すれば、正しく表示されます。
推測するに、プレビュー画像の描画プロセスで何らかのエラーが生じているように思われます。
-
kokemomoyamamomo様
Set wrksht = Worksheets("□□□")
Set wrksht2 = Worksheets("●●●")データセット部分
wrksht2.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht2.Visible = xlSheetVisible
wrksht2.PrintPreview ←これはきちんと出ます。
wrksht2.Visible = xlSheetHiddenSet wrksht = Worksheets("□□□")
Set wrksht3 = Worksheets("▲▲▲")
データセット部分
wrksht3.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht3.Visible = xlSheetVisible
wrksht3.PrintPreview ←これが添付画面のようになります。
wrksht3.Visible = xlSheetHidden特に複雑なコマンドでもないので理由が不明です。
-
infade様
上記と同じ内容ですが
Set wrksht = Worksheets("□□□")
Set wrksht2 = Worksheets("●●●")データセット部分
wrksht2.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht2.Visible = xlSheetVisible
wrksht2.PrintPreview ←これはきちんと出ます。
wrksht2.Visible = xlSheetHiddenSet wrksht = Worksheets("□□□")
Set wrksht3 = Worksheets("▲▲▲")
データセット部分
wrksht3.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht3.Visible = xlSheetVisible
wrksht3.PrintPreview ←これが添付画面のようになります。
wrksht3.Visible = xlSheetHidden特に複雑なコマンドでもないので理由が不明です。
-
qoo_manさん、こんにちは。
コードのご提供、ありがとうございました。Windows7+Excel2013で実行してみましたが、特段の支障なく、1回目も2回目もプレビューが表示されました。for~nextで10ラウンド実行してみても、問題なくプレビューが表示されました。
単純に
Sub Test()
ActiveSheet.PrintPreview
ActiveSheet.PrintPreview
End Sub
でもこのようになるでしょうか。それとも、提供されたコードならではでしょうか。なお、Excel VBA PrintPreview でググろうとしましたら、「Excel VBA PrintPreview 固まる」というキーワードが提示されて、それをいろいろ見てみたら、次のようなページがありました。症状は違いますが、つい2か月ばかり前に最終更新された記事でした。PrintPreviewは結構危ういコマンドなんでしょうかねぇ。ご参考まで。
https://answers.microsoft.com/ja-jp/msoffice/forum/all/%E5%8D%B0%E5%88%B7%E3%83%97%E3%83%AC%E3%83%93/8293ff4f-7b67-4a1b-8aa7-53b16664d51b- 編集済み KokemomoYamamomo 2019年5月31日 4:19
-
infade様
上記と同じ内容ですが
Set wrksht = Worksheets("□□□")
Set wrksht2 = Worksheets("●●●")データセット部分
wrksht2.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht2.Visible = xlSheetVisible
wrksht2.PrintPreview ←これはきちんと出ます。
wrksht2.Visible = xlSheetHiddenSet wrksht = Worksheets("□□□")
Set wrksht3 = Worksheets("▲▲▲")
データセット部分
wrksht3.Range("AR1").Value =wrksht.Range("AR1").Value
wrksht3.Visible = xlSheetVisible
wrksht3.PrintPreview ←これが添付画面のようになります。
wrksht3.Visible = xlSheetHidden特に複雑なコマンドでもないので理由が不明です。
Sub test() ' ワークシートの変数 Dim wrksht As Worksheet, wrksht2 As Worksheet, wrksht3 As Worksheet ' 最初のワークシートを取得 Set wrksht = Worksheets(1) ' ワークシートを 2 つ新規作成して取得 Set wrksht2 = Worksheets.Add(, Worksheets(Worksheets.Count)) Set wrksht3 = Worksheets.Add(, Worksheets(Worksheets.Count)) ' 最初のワークシートをアクティブにする wrksht.Activate ' 新規作成したワークシートを非表示にする wrksht2.Visible = xlSheetHidden wrksht3.Visible = xlSheetHidden ' 最初のワークシートの AR1 セルに文字列 "test" を入力 wrksht.Range("AR1").Value = "test" ' 2 つ目のワークシートの AR1 セルに最初のワークシートの AR1 セルの内容をコピー wrksht2.Range("AR1").Value = wrksht.Range("AR1").Value ' 2 つ目のワークシートを表示して印刷プレビュー wrksht2.Visible = xlSheetVisible wrksht2.PrintPreview ' 2 つ目のワークシートを非表示に戻す wrksht2.Visible = xlSheetHidden ' 3 つ目のワークシートの AR1 セルに最初のワークシートの AR1 セルの内容をコピー wrksht3.Range("AR1").Value = wrksht.Range("AR1").Value ' 3 つ目のワークシートを表示して印刷プレビュー wrksht3.Visible = xlSheetVisible wrksht3.PrintPreview ' 3 つ目のワークシートを非表示に戻す wrksht3.Visible = xlSheetHidden End Sub
-
qoo_man様 こんばんは、以前私が経験した例で不具合が解消されるでしょうか
ユーザーフォームからでしたし、ブックも非表示にしていましたし、コードも違うので期待はできませんが、
あくまで情報として。。根拠を示せるほどのスキルはありませんが、
Excel2013からSDIに代わってからPrintPreviewはどうも不安定になることがあるような、、、wrksht2.Visible = xlSheetVisible
wrksht2.PrintPreview ←これはきちんと出ます。
wrksht.Activate ’明示的にアクティブにする
wrksht2.Visible = xlSheetHiddenその時は、この方法で回避出来ました。その後、おまじないの様にPrintPreview後に付け加えています。W
ちなみに、qoo_man様の示されているコードとinfade様の示されているコード共に事象の再現が出来ませんでしたので関係あるかどうか分かりませんが。
追記:確か、プレビューウインドウからエクセルシートに戻るときに不具合が出て・・だったと
これは、確か2010で作ったファイルを2013で検証している時の事だったと思い出しました。いずれにしても、示されているコードを基に、処理途中でプリンターを変更したり、グラフを作成したり、新規ブックにコピー処理を入れたり、デバックでエラーにならない程度の処理を追加して色々実行して検証しましたが、自宅のPCでは再現できませんでした。 Windows10 Excel Home and Business 2013 15....
<おまじないの様にPrintPreview後に付け加えています。>検証の結果必要無い事が分かりました。(当然か)
記憶による、根拠のない情報で申し訳ございません。
- 編集済み Takumi_Q 2019年6月2日 4:49 再現を実験し追記
-
qoo_manさん、こんにちは。
非力な私の見立ては、Printpreviewの2回目のプロセス中、プレビューの画像を描画する窓の表示まではできたけれども肝心の画像が準備できないため止まっている、ということだろうと理解しています。
以前に記しましたが、システムが正常であれば、プレビューの窓のサイズを変更すると、再描画の動作が機能するようですので、当初投稿の画面が表示された段階で、プレビューの窓のサイズを変更してみて、正しくプレビュー画像が表示されるか、ダメなままか、を試されてみてはいかがでしょうか。ダメなままであれば、コントロールパネルからシステムファイルを修復したほうが早いような気がします。ご参考まで。
-
-
私のところでも多発しています。
Excel2010(32bit)、Excel2013(32bit)、2016(64bit)を主に使っていますが、2013と2016で発生します。
ズームやページ切替を行ったり、ウインドウの大きさを変えたりすると、きちんと描画されます。
たぶん、2013/2016のバグじゃないかと思います。
プレビューコマンドの前に、SendKeysで「ズーム」のショートカットを2回分送ると、一瞬ズームちらつきがあって煩わしいものの、とりあえずは表示されるのではないかと思います。
With Application
If Val(.Version) >= 15 Then .SendKeys "zz"
.Dialogs(xlDialogPrintPreview).Show False
'.CommandBars.ExecuteMso "PrintPreviewFullScreen" 'これでも可
'ActiveSheet.PrintPreview 'これでも可
'ActiveSheet.PrintOut Preview:=True 'これでも可
End With