[[20200510182200]] 『連続印刷の方法』(狭山) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『連続印刷の方法』(狭山)

 お世話になります。

 Sheet 1 に、下記のようなリストがあります。                      								

	 A      B       C       D          E・・・・・・							
 4	 1    山田太郎    ABC   DEF    東京							
 5	 2    佐藤太郎    ABC   DEF    東京							
 6	 3    佐々木気    ABC   DEF    東京							
 7	 4    佐藤太郎    ABC   DEF    東京							
 8	 5    佐藤太郎    ABC   DEF    東京							

 Sheet 2 は、印刷用のフォームになっています。								
(印刷範囲は A1:F59)です。								

 Sheet1のデータがリンクしてあります。(VLOOKUPで入れております)								
 A列の番号を基準にしまして Sheet 2 の I3 のセルに入力すると								
 Sheet 1の内容が出て印刷できるようにしてありますが								
 現在は 手入力で1枚づつ印刷しています。								
 指定すれば自動で連続印刷できるようにしたいのですが、								
 VBAのご伝授をお願い出来ないでしょうか								
 要望はマクロを実行すると								
  "印刷する最初の番号を入力"								
  "印刷する最後の管理番号を入力"								
  "印刷が完了。"								
 とメッセージが欲しいです。

 どうぞよろしくおねがいします。								

< 使用 Excel:Excel2016mac、使用 OS:Windows10 >


>VBAのご伝授をお願い出来ないでしょうか
回答でなく確認ですが、今いくらか手を付けているのでしょうか?
それとも、以前のようにただの作業依頼なのでしょうか?

"質問"だとして
>Sheet2 のI3セルに入力すると Sheet1の内容が出て印刷できるようにしてありますが
> "印刷する最初の番号を入力"
> "印刷する最後の管理番号を入力"
> "印刷が完了。"
とのことですから、「最初の番号」〜「最後の管理番号」を順番に

 (1)Sheet2のI3セルに入れる
 (2)印刷する

を繰り返すだけでよいように思いますが、どこでつまってますか?

(もこな2 ) 2020/05/10(日) 18:35


 参考に

 Sub Test()
    Dim pSta As Long, pEnd As Long, i As Long

    pSta = Application.InputBox("開始番号を入力してください。", Default:=1, Type:=1)
    pEnd = Application.InputBox("終了番号を入力してください。", Type:=1)
    With Sheets("Sheet2")
        For i = pSta To pEnd Step 59
            .Range("I3").Value = i
            .PrintOut
          ' .PrintOut Preview:=True  '印刷の度にプレビューを表示するのなら、こちらを使用
        Next
        MsgBox "印刷が完了。", vbInformation
        .Range("I3").Value = 1
    End With
 End Sub

(ピンク) 2020/05/10(日) 19:26


(ピンク)様   (もこな2 )様

有難うございます。
(ピンク)様のコードで出来ました。

最初に入れれば良かったのですが以前に使用していました
別のコードを入れたのですがNGになってしまい
最初から教えていただいた方が早いと思い入れてしまいました。
申し訳ございませんでした。

Sub Test()
 Dim ST As String
 Dim EEND As String
 ST = InputBox("印刷する最初の番号を入力")
 If ST = "" Then
 MsgBox "処理を中断します。"
 Exit Sub
 End If
 EEND = InputBox("印刷する最後の管理番号を入力")
 If EEND = "" Then
 MsgBox "処理を中断します。"
 Exit Sub
 End If
 Sheets("Sheet1").Select
 Do While ST <> EEND + 1
 Range("I3").Value = ST
 Calculate
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
 'MsgBox ST & "枚目の印刷をします。"
 ST = ST + 1
 Loop
 MsgBox "印刷が完了。"

End Sub

上記のが使用できていたのですが今回貼り付けて行ったところ
駄目でした。

(狭山) 2020/05/10(日) 19:56


ピンクさんが示されたように、一定数ずつ変化していくなら「For〜Next」のほうがおすすめではありますが、「Do〜Loop」で処理できないわけではないです。

>上記のが使用できていたのですが今回貼り付けて行ったところ駄目でした。
ちゃんと、元のコードを理解するようにして"どのシートを対象にしているか"に着目するとよいとおもいます。

    Sub Test改()
        Dim ST As String
        Dim EEND As String

        ST = InputBox("印刷する最初の番号を入力")
        If ST = "" Then
            MsgBox "処理を中断します。"
            Exit Sub
        End If

        EEND = InputBox("印刷する最後の管理番号を入力")
        If EEND = "" Then
            MsgBox "処理を中断します。"
            Exit Sub
        End If

        'Sheets("Sheet1").Select ←いらない
        Do While ST <> EEND + 1
            Worksheets("Sheet2").Range("I3").Value = ST  '←対象シートを明示する
            Calculate
            Worksheets("Sheet2").PrintOut Copies:=1, Collate:=True '←対象シートを明示する
            'MsgBox ST & "枚目の印刷をします。"
            ST = ST + 1
        Loop

        MsgBox "印刷が完了。"
    End Sub

(もこな2 ) 2020/05/10(日) 20:19


(もこな2 )様

お世話になります。
コードの修正有難うございました。出来ました。

反省
最初からこれを行ったからダメだった事を説明をすればと反省しております。
本当に申し訳ございませんでした。

作業シートを明確にしないとダメだったんですね。
今後も宜しくお願い致します。
(狭山) 2020/05/10(日) 21:12


ちょっと見返してみたら、変数の型が変ですね。
エクセル君の忖度で成功しちゃってますが、String型は適切ではありませんね。

(もこな2 ) 2020/05/11(月) 08:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.