3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

フォームから印刷プレビューを呼び出す際の注意点

2010年11月26日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

ジーザス小川です。

昨日、日帰りで鳥取出張をしてきました。

その前日は、徹夜でぶっ通しで仕事。

出張当日は、早朝5時15分に新宿駅前から出るリムジンに乗って羽田入り。
6時40分発の飛行機で鳥取入りし、帰ってきたのは夜8時前。

東京に戻ったところで、会食の約束があったので新宿に直行。
会食のあと、家に帰ったとたん、爆睡。

そして、今朝は、4時40分に起床。
早朝5時15分に新宿駅前から出るリムジンに乗って羽田入り。
6時20分の飛行機で沖縄入り。

午前中にホテルの場所を確かめたあと、ホテル近くの喫茶店で仕事。
PCのバッテリーが落ちたところでホテルに戻ってチェックインし、引き続き仕事。

とりあえず当面やらなければならないことを切り上げた段階でついに2時間ほど寝てしまいました ヾ(´ー`)ノ

さっき、起き出したところです。

そんなわけで、ブログの更新が、中二日空いてしまいました。楽しみにされていたようでしたら、すいません。

そんなこんなで、今日は、受講生からいただいた質問から。

エクセルVBAのユーザーフォームで生じる問題についてです。

こんな相談でした。

○○です。久しぶりに質問させていただいてもいいでしょうか?

ユーザーフォームを作って、オプションボタンを選びプレビューさせるか、
印刷するという一件何でもないコードをくみましたが、フリーズしてしまいます。

何が悪いのかご教示いただければ幸いです。

画像入りで解説すると、こんな感じ↓。

フォームの外観の設計はこんな感じ。
エクセルマクロ達人養成塾塾長ブログ-フォーム

フォームを起動した状態。「プレビュー」を選択し、「実行」ボタンを押す。
エクセルマクロ達人養成塾塾長ブログ-フォームを起動した状態

すると、「実行」ボタンに関連づけられた、以下のコードが実行される。

Private Sub CommandButton1_Click()
    If OptionButton1.Value = True Then
        ActiveSheet.PrintOut
        Unload Me
    Else
       If OptionButton2.Value = True Then
        ActiveSheet.PrintPreview
        Unload Me
       End If
    End If
End Sub

すると、以下のように、フォームの下に印刷プレビューが表示される。そして、そのままエクセルが操作を受け付けなくなる。
エクセルマクロ達人養成塾塾長ブログ-実行ボタンを押した

この状態を解消するには、Windows画面下のバーからエクセルを見つけてきて、右クリックから「グループを閉じる」を選択してください。(それでダメなら、タスクマネージャからExcelを強制終了してください ヾ(´ー`)ノ)
エクセルマクロ達人養成塾塾長ブログ-エクセルを終了する方法

ということで。

この、「フォームの下に印刷プレビューが表示される。そして、そのままエクセルが操作を受け付けなくなる。」という状態になることを、どう回避するか。

結論としては、にっちもさっちも行かなくなっているのは、「印刷プレビュー」の手前にフォームが表示されたままだからのようです。

ですから、「印刷プレビュー」を表示する前にフォームを非表示にすれば解決します。

この問題の回避策。一例としては、以下の方法。先に紹介したコードをちょっと書き換えました。

Private Sub CommandButton1_Click()
    If OptionButton1.Value = True Then
        ActiveSheet.PrintOut
        Unload Me
    Else
       If OptionButton2.Value = True Then
        Me.Hide 'コレを追加した
        ActiveSheet.PrintPreview
        Unload Me
       End If
    End If
End Sub

そのほか、例えば、フォームの呼び出し方で工夫することも考えられます。
フォームの呼び出し時に、以下のように、「vbModeless」オプションを指定します。
「vbModeless」オプションを指定してフォームを起動すると、フォーム起動中にもかかわらず、その後ろに表示されているエクセル画面を自由に操作できます。

標準モジュールに以下のマクロを追加して、実行してみてください。
(以下のマクロは、実行前に、「UserForm1」の部分は、作ったフォームのオブジェクト名に変更してくださいね。)

Sub main()
    UserForm1.Show vbModeless
End Sub

12月12日(日)、「イベントとフォーム」セミナーを実施します。「エクセルマクロはまったくはじめて」という方は不可ですが、紹介ページで記載している条件を満たしていると感じられるようでしたら、お申し込みください。
http://www.exvba.com/ef/index.php

「まだ条件を満たしていないな」と感じられるようでしたら、「エクセルマクロ初中級速習コース」をどうぞ。12月4日~5日のコースはキャンセル待ちですが、29日~30日はまだちょっと空きがあります。
http://www.exvba.com/vb/index.php

今日は、これから買い物に行ってきます。
今朝、起きて10分で支度してきたので、着替えがないのです。。(汗

そのあとは、沖縄オフ会です。6人程度の参加者なので、濃いー話をゆっくりできるかと思っています ヾ(´ー`)ノ
http://ameblo.jp/kanjizaibosatsu/entry-10708394009.html

今からでも、あと2名くらいは大丈夫なようです。いないと思いますが、このブログを今読んで「オフ会に行きたい!」と思われた那覇または那覇近郊にいらっしゃるあなた、質問フォームからメールアドレスと電話番号をご連絡ください。折り返し、ご連絡いたしますね。 ヾ(´ー`)ノ

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド