質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

11101閲覧

VBA:ユーザーフォーム上から印刷プレビューを実行するとExcelが固まる

kolobokkule

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/03/14 06:06

前提・実現したいこと

Excel VBAにてフォーム上のボタンにActiveSheet.PrintPreviewを設定し、印刷プレビューを表示させると、プレビューがフォームの後ろに隠れ、さらにExcelが固まります。
Me.Hideを使用して、フォームを非表示にして使用しようかとも思いましたが、フォームが複数開いているため、うまくいきませんでした。
複数のフォームを非表示にする方法など模索しましたが、力及ばず詰んでしまったため質問させていただきます。

フォーム上から印刷プレビューを呼び出したときに、プレビューが複数のフォームの後ろに隠れることなく表示させるにはどのような方法があるでしょうか。印刷後は再び元のフォームに戻れると理想的です。
よろしくお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージはありません。

###フォーム上のボタンから印刷プレビューを表示

Private Sub btnPrint_Click()   ActiveSheet.PrintPreview End Sub

試したコード

複数のフォームが開いているため、うまくいきませんでした。

Private Sub btnPrint_Click()   Me.Hide   ActiveSheet.PrintPreview   Me.Show End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

仕組みによっては二次災害待ったなしですが。

UserForm1.Show vbModeless

使えるようだったらどうぞ。

投稿2019/03/15 00:48

torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kolobokkule

2019/03/16 01:08

回答ありがとうございました。
guest

0

「試したコード」の方法くらいでしょうかね、対策としては。
プレビューをする時点で開いている画面はわかるでしょうから、開いている全てのフォームを非表示にすればよいかと。

VBA

1Private Sub btnPrint_Click() 2  Me.Hide 3  UserForm1.Hide 4  UserForm2.Hide 5  ActiveSheet.PrintPreview 6  Me.Show 7  UserForm1.Show 8  UserForm2.Show 9End Sub

投稿2019/03/14 07:39

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kolobokkule

2019/03/14 08:49

回答ありがとうございます。 この方法も試しましたが、呼び出すフォームも複数あるために、場合によって印刷の瞬間に開いているフォームが様々で、.Hideするフォームが存在しない時にエラーが発生してしまいます。 この場合の対処法などはありますでしょうか。
ttyp03

2019/03/14 08:59

UserFormsでインスタンスがあるフォームが取得できると思うので、次のような感じでループで処理したらどうでしょうか。 For Each f In UserForms f.Hide Next プレビュー後も同様にループで回してShowすればいいです。
kolobokkule

2019/03/15 01:09

この場合ですと、f.Hideの時点で「一番手前のモーダルフォームを先に閉じてください」とエラーが発生してしまいました。
ttyp03

2019/03/15 01:12

あー順番を気にしないといけないのか。 面倒ですね。。。
kolobokkule

2019/03/15 01:29

For eachを逆に回せればうまくいくのでしょうか?
ttyp03

2019/03/15 01:31

順番は担保されないような気がするので、逆に回してもダメかと思います。
kolobokkule

2019/03/15 01:32

なるほど、、、もう少し悩んでみます、、、
ttyp03

2019/03/15 02:22

非表示にしたところで結局プレビュー画面が操作できないようなので、印刷機能があるフォームはモードレスで表示しないとダメそうです。
kolobokkule

2019/03/15 02:54

そうなのですか、、、 一つ一つ選択してモードレスにするしかないでしょうか?
guest

0

自己解決

印刷専用のフォームを作成し、開いた順に1つずつ非表示とすることにしました。

投稿2019/03/16 01:08

kolobokkule

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問