Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3870 / 13644 ツリー ←次へ | 前へ→

【59761】同一ページの連続印刷について kawa 09/1/7(水) 16:00 質問[未読]
【59762】Re:同一ページの連続印刷について マクロマン 09/1/7(水) 16:02 発言[未読]
【59765】Re:同一ページの連続印刷について kawa 09/1/7(水) 17:06 質問[未読]
【59772】Re:同一ページの連続印刷について マクロマン 09/1/7(水) 20:38 発言[未読]
【59773】Re:同一ページの連続印刷について kawa 09/1/8(木) 0:04 質問[未読]

【59761】同一ページの連続印刷について
質問  kawa  - 09/1/7(水) 16:00 -

引用なし
パスワード
   はじめまして、よろしくお願いします。
早速ですが、質問させてください。

連番・枝番の開始・終了番号を入力すると、表のラベルに連番・枝番が出力され、
その表を連番毎に1枚に収めて印刷する、という簡単なプログラムを作成しています。
枝番が6であれば、枝番1〜6の表が同一の連番で1枚出力されるというものです。

ただ、印刷する際に連番が重複するという問題が発生しました。
そのため、印刷している部分(PrintOut)をコメントアウトし、デバッグで確認してみましたが、数値が重複するという現象は出ませんでした。
ひとまず、ネットで調べたSleep関数(0.5秒)を使用するという対策をしてみましたが、相変わらずその現象は出続けています。

エクセルで連続して印刷すると、このようなことがおこるのはしょうがないことで、
本来やるべきではないのでしょうか?
それとも回避策があるのでしょうか?
まったく見当がつかない状態で、ご教示お願いします。

【59762】Re:同一ページの連続印刷について
発言  マクロマン  - 09/1/7(水) 16:02 -

引用なし
パスワード
   現状のコードはアップできませんか?

【59765】Re:同一ページの連続印刷について
質問  kawa  - 09/1/7(水) 17:06 -

引用なし
パスワード
   すばやいお返事、ありがとうございます。

ちょっと長いのと、必要ない部分、逆に足りない部分もあるかもしれませんが
よろしくお願いします。
調べてみると、Sleepの時間が短すぎるのかな、とも思ったのですが…

'印刷処理
Private Sub PrintProc(ByVal 出力されるシート名 As String)
  
  Dim i As Long
  Dim j As Long
  Dim txt As String
  
  With Worksheets(入力したシート名)
      
    For i = 連番の開始番号 To 連番の終了番号
      For j = 枝番の開始番号 To 枝番の終了番号
        
        txt = Left(Format(i, "00000"), 2) & " " & Right(Format(i, "00000"), 3) & Format(j, "00")
        
        Select Case j
          Case 1
            Worksheets(出力されるシート名).lblSeq1.Caption = txt
          Case 2
            Worksheets(出力されるシート名).lblSeq2.Caption = txt
          Case 3
            Worksheets(出力されるシート名).lblSeq3.Caption = txt
          Case 4
            Worksheets(出力されるシート名).lblSeq4.Caption = txt
          Case 5
            Worksheets(出力されるシート名).lblSeq5.Caption = txt
          Case 6
            Worksheets(出力されるシート名).lblSeq6.Caption = txt
          End Select
      Next
      
      '枝番が3かつ空欄なしの場合、出力処理
      If Not (.Range(InputEdaEd) = 3) Then
        
        '印刷処理
        DoEvents
        Sleep 500
        Worksheets(sheetname).PrintOut
        
        DoEvents
        
        'ラベルの初期化(関数は別に有ります)
        InitLabelCaption (sheetname)
      End If
    Next
    
    InitLabelCaption (sheetname)
  End With

End Function

【59772】Re:同一ページの連続印刷について
発言  マクロマン  - 09/1/7(水) 20:38 -

引用なし
パスワード
   >デバッグで確認してみましたが、数値が重複するという現象は出ませんでした。

ということなので原因がわかりませんが、
Select Case
の代わりに↓の方法は使えませんか?

Dim i As Integer
 For i = 1 To 5
  Worksheets(1).OLEObjects("Label" & i).Object.Caption = i
 Next i

【59773】Re:同一ページの連続印刷について
質問  kawa  - 09/1/8(木) 0:04 -

引用なし
パスワード
   確かに教えてもらったような書き方がありましたね、忘れてました。
べた書きでは効率悪そうだし、見た目も良くありませんね、直してみることにします。ありがとうございました。

本題については、とりあえずSleepの時間くらいしか自分では思いつかないので試してみますが、何か他に情報がある方がいらっしゃったらお願いします。

3870 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free