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

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

ただいまの
回答率

89.99%

Excel マクロでワークシートを連続印刷するとExcelがフリーズするのはなぜ?

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,127

kai_keitai

score 187

 ワークシートの複数のセルに値を代入して印刷を繰り返すと突然シート上にあるテキストボックスのサイズが画面一杯一杯のサイズに変更され、Excelがフリーズする問題

今、Windows7(32bit)→Windows10(64bit)へ移管する準備の一つ、Office2010(32bit)→Office2016(64bit)のテストをしているのですが、Excelの印刷でどうしても解決できない為、投稿させていただきます。
しばらく、32bitと64bitが混在する環境になるのですが、いずれ全て64bitへシフトします。

フリーズするタイミングに特徴があるので、テストした内容を説明します。

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

1.印刷する件数が20件くらいで、画面にあるシェイプの大きさが画面一杯のサイズになってフリースする
2.5件くらいの件数を実行すると、1回目は成功しますが、2回目以降は、2件目くらいでフリーズする
3.再起動やプリンタードライバーを行いましたが、現象は変わらず
4.一回だけエラーメッセージが表示されましたが、内容は「メモリ不足です。64bit環境に切り替えて下さい。」のメッセージ。

動作環境

Windows 10 Pro 64bit
Excel 2016
Excel Version 16.0.4639.1000    64bit
cpu i5-6200U
memory  8GB
Printer RICHO MP C4503z
pc HP製 / ProBook 450 G3


 該当のソースコード

#If Win64 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Public Sub cmdPrintOut()
    DoEvents
    Sleep (500)
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

Public Sub main()
    ~ 略 ~
    With Application.Workbooks("Book1.xlsm").Worksheets("シート")
        .Select
        For i = 1 To RecordCount

            .Range("L9").Value = TEHAI(i).発行番号
            ~ 略 ~
            .Range("K12").Value = TEHAI(i).管理番号

            Call cmdPrintOut()

        Next i
    End With
    ~ 略 ~
End Sub

 試したこと

Office2010(32bit)の時は、API関数のSleep関数は不要で、何件でも処理ができていました。64bitにした時、一回動作がおかしくなり、苦肉の策でSleep関数を追加したら上手く実行出来ました。

コードのSleep関数の引数は 500 ですが、2000 に変更してもフリーズする件数は変わらない。

デバックでは、PrintOutメゾットでエラーになっていることがわかりました。

メモリの使用容量をみても300MBで、問題ありませんでした。

プリンタードライバーを最新にしても、印刷スピードが速くなったが、フリーズする件数は同じ。

家のパソコンで実行したら、問題なく動作した。
家のパソコン↓
TOSHIBA dynabook T95
Windows 10 HOME 64bit
Excel 2016 16.0.9029.2253    64bit
cpu i7-4720HQ
memory 8GB

 その他

会社のExcelのバージョンが低いのは、勝手にソフトのアップデートができないようにセキュリティーがあるためです。また、ギリギリの期間まで、32bitと64bitの環境が混在するので、どちらでも動作できるように作り込みが必要です。
過去の経験から推測でパソコンのスペック不足かExcelの不具合と推測しています。

フリーズする原因が特定できれば十分です。
よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

そもそもですが、OfficeはMicorsoftが32bitを推奨しており、
それはつまり、64bitだと不明な不具合がある可能性を示唆していると考えられます。

自分の開発したシステムでも、WinAPI回りでOfficeが落ちる不具合があり、
64bit環境では一部の機能を断念せざるを得なかったケースがありました。

今からでも32bitOfficeに戻す選択肢を考えてみてもいいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/19 12:56

    回答ありがとうございます。

    32bitを推奨していたのは初めて知りました。
    確かに、64になって使えなくなったwinAPI関数ありますよね。

    後々、Office365へ移行する事が、経営会議で決済されたので、それまでの我慢かなと思います。
    会社のアプリなので、今更 32bitへ戻す選択肢はないので、
    プログラムで制御するようにします。

    何で、パソコンのスペック上がるのにとの自分の不満があります。が、仕方が無いですね。
    有難うございました。

    キャンセル

  • 2018/03/19 16:50

    この後、Microsoftのホームページにて、32bitを推奨している理由がわかりました。
    これからは、大量データをユーザー側で扱う事が多くなると思うので、64bitが正しい選択だと思います。

    32bitと64bitで、処理を分ける様にプログラムを修正します。
    ありがとうござました。

    キャンセル

  • 2018/03/19 17:05

    大量データの方が優先という事でしたら致し方ありませんね。

    ただ、32bit+64bitの共存や、Officeバージョンの共存など、
    複数バージョン対応は苦労の種でもあるので、
    できる範囲でクロージングしておく方が無難ですし、
    顧客とも、同じものではなく調整が必要な場合がある、
    という認識を合わせておく方がよいと思います。

    でないと、なんで先に言わなかったのか、
    という点で後から責任を問われる可能性があるでしょう。

    もちろん、はっきりとした原因が分からないので伝えにくいでしょうけども、
    調査した結果が原因不明(64bit依存)なのであれば、伝えるべきかと。

    非常に苦労された話を何度も聞かされたことがありますし、
    そこまでではなくとも、自分も多少は経験があるので。。。

    プロジェクトの成功をお祈り申し上げます。

    キャンセル

  • 2018/03/26 21:18

    ExcelVBAer様、今回、調べたことを伝えたら、特別に32bit版のOffice2016がインストールされたWindows10(64bit)のパソコンを設定してもらい、送って頂き、早速、動作検証をしました。
    すると、何のストレスも無く動作しました。いや、32bitのExcelの方が動作速度が速かったです。
    この事を情報システム部門で今後の方向性を再検討すると思われます。
    実際には、Office365が導入される予定となっているので、もしかすると、先行でOffice365の検証が行われるかもしれません。
    本当に、貴重なご意見、ありがとうございました!

    キャンセル

+1

環境相違ということであれば、プリンター環境の相違も考えられそうです。
出力先をpdfに変更してエラーの状況を確認されてみてはどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/19 11:59

    ご回答ありがとうございます。

    印刷するだけのモジュールを作っているのは、
    本番環境では、紙で印刷するか、PDFで出力するかの
    引数があるのです。

    PDFにしても全く同じ現象が発生しているのを
    確認済みなのです。

    プリンターとかディスプレイアダプタとかの総合環境なのでしょうか?


    Microsoftのコミュニティで、ActiveXの不具合について報告がありました。
    それとそっくりな現象なんですよね。

    自分なりに調べ尽くして、ここに質問しました。
    印刷に関する事は、情報が少なく、バグ報告も少ないので、最後の頼りです。

    Microsoftにも不具合報告をするしか無いのかな?

    キャンセル

  • 2018/03/19 12:07

    PrintOutが1回だけだとエラーにはならないのでしょうか?
    そうであれば、(根本の解決にはならず、選択はしたくないでしょうけど)最後の手段としては印刷を1回にすることですね。

    キャンセル

  • 2018/03/19 12:10

    後は、windows updateやoffice updateを試してみるとか。

    キャンセル

  • 2018/03/19 12:50

    コメントありがとうございます。

    やはり、そうですよね。
    UIで、印刷の件数を制限したり、回数を制限する様にするしか無いようです。

    最後の手段で、アップデートがありますので、
    情報システム部へ依頼してみます。

    キャンセル

0

8GBもあれば物理的に足りないことは無いと思うので(他に何か動作していなければ)、
割り当てられているメモリが少ないのかもしれないですね。
以下方法でエクセルで使用可能になっているメモリを参照してみて
http://officetanaka.net/excel/vba/tips/tips71.htm
足りなさそうなら以下方法で増やしてみてください。
http://u-note.me/note/47496557

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/19 09:49

    ご回答ありがとうございます。

    Hasegawa_2様の提案された方法で確認済みです。
    メモリの使用容量には問題がない事が分かっています。

    Excelで印刷するだけ時の注意点とかあればいいのですが。

    自分の推測では、グラフィックボードの問題かなと思うのですが、
    証拠が取れなくて困っています。

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる