Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 8.1 Pro : Excel 2010)
PageSetupとPrintCommunicationでエラー
投稿日時: 17/05/19 07:19:32
投稿者: tako552101

マクロでPageSetupを指定すると恐ろしく遅くなるので、2010以降に追加された
PrintCommunicationオフでプリンタとの通信遮断し、PageSetup PrintCommunicationオンで
かなりのスピードアップとなりましたが、ヘッダーに文字を追記している部分でおかしなこと
(文字が1字ずつ消えるなど繰り返すたびにいろいろ)が起こります。
 
どなたかご指導お願いします。
 

Sub ■印刷設定テスト()

Application.ScreenUpdating = False

Dim t As Single
t = Timer   '時間計測開始

'プリンタとの通信 一時中断 Ver2010以降
Application.PrintCommunication = False
    
    Dim 主催者名 As String
    Dim 下端行 As Integer
    
    主催者名 = "●×▲■同好会"
    下端行 = 100

    With ActiveSheet.PageSetup
        .PrintArea = "$A$3:$Q$" & 下端行
        .PrintTitleRows = "$2:$2"
        .PrintTitleColumns = ""
        .CenterHeader = ""
        .RightHeader = ""
        .CenterHeader = "&""MS Pゴシック,太字""&16" & "【参加者リスト】"
        .RightHeader = "&""MS Pゴシック,標準""&10" & "[" & "&D" & "] [" & "&P" & "/" & "&N" & "]" & vbLf & _
                       "&""MS Pゴシック,太字""&12&U" & 主催者名 & "&U"

    End With

'プリンタとの通信 再開 Ver2010以降
Application.PrintCommunication = True

Application.ScreenUpdating = True

MsgBox "処理時間: " & Round(Timer - t, 2) & " 秒"

'プレビュー表示
ActiveWindow.SelectedSheets.PrintPreview

End Sub

回答
投稿日時: 17/05/19 12:26:47
投稿者: Suzu

こんにちは。
 

ヘッダーに文字を追記している部分でおかしなこと 
(文字が1字ずつ消えるなど繰り返す[color=red]たびに[/color]いろいろ)が起こります。 

 
その「いろいろ」の内容が問題なのですが。。。
 
エラー 1004 であれば、WEB上で検索すれば情報が出てきます。
  処理内容の順番を入れ替えたらエラーが出なくなった報告もありますね。
 
 
あとは、プレビュー画面のみ。または印刷物のみで希望と違うのか、
        画面/印刷物 両方で希望とちがうのか。
 
PrintCommunication = False / True を コメントアウトしたら希望通りになるのでしょうか。

投稿日時: 17/05/19 17:22:47
投稿者: tako552101

Suzuさん、ありがとうございます。
 
言葉が足らなかったですね。すみません。
 
目的は印刷範囲、タイトル行を設定して、ヘッダ中央に"【参加者リスト】"、ヘッダ右には"日付"と
"ページ数"と主催者名="●×▲■同好会”を指定したフォントサイズ、装飾(マクロの自動記録)で
表示する、というものです。
 
当方の環境はWin8.1pro Excel2010ですが、新しいブックに前述のコードを標準モジュールに追記して
PrintCommunication = Falseで実行しますと、ヘッダ中央には「【参加者リス」と2文字削除されて
表記、右は主催者名が削除となります。このまま続けていきますとヘッダ中央には「【参加者」とさらに
2文字削除されて表記、と繰り返すたびに減り、その後、右に指定したはずの日付が中央に表示されたりとおかしなことになるのです。
 
一方、PrintCommunicationをコメントアウトして実行しますと、目的通りの表示(プレビューでも印刷でも)をしてくれます。
 
デスクトップと、ノートで試しましたがいずれも同じ結果でした。
 
よろしくお願いします。

回答
投稿日時: 17/05/20 11:45:46
投稿者: Suzu

内容が確認できました。
 
シングルステップ実行時は問題ないのですが、
「F5」等で全てを停止無しで進ませるのを、2回以上続けて実施した場合、
Headerに渡した文字列の一部が消失してしまいます。
 

Debug.Print ActiveSheet.PageSetup.RightHeader

'プリンタとの通信 再開 Ver2010以降
Application.PrintCommunication = True

Debug.Print ActiveSheet.PageSetup.RightHeader

の様に、PrintCommunicaion プロパティー True の前後で文字列が消失している事が確認できます。
 
何らかの不具合と思われ、回避策は見つかりませんでした。
 
対応策
1. PrintCommunicaion の On/Off をしない。
2:予めヘッダーを設定したファイルを用意しておき、そのファイルをコピーし使用する。
3: 2と考え方は一緒ですが、差し込み印刷で対応
4:ヘッダーで対応しないで、セルの中で対応し、列見出しとして使用する。
5.:2回以上実施すると起こるので、
     ヘッダーに値が設定されているか、或いは、モジュールレベルの変数をフラグとして使用し
     複数回、ヘッダーの値の代入を実行しない様にする

回答
投稿日時: 17/05/23 21:53:43
投稿者: simple

Suzuさんのおっしゃるとおりですね。
 
実は私も半年くらい前に職場で同じ現象に気づきました。
こんなはずはないと、色々トライしましたが解決策は見いだせませんでした。
結局、私は
>1. PrintCommunicaion の On/Off をしない。
としました。
少し時間はかかりますが、精度が落ちるよりもよほどよい、と諦めました。
# それにしても反応が無いのではいただけないですよね。

トピックに返信