[[20140906063743]] 『プリンターで連番の降順印刷』(mikineko) ページの最後に飛ぶ

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

 

『プリンターで連番の降順印刷』(mikineko)

VBAマクロ使用し、コピー機で数百枚作製した伝票の特定位置に「連番」を差し込み印刷しております。
 作業の性質上、この連番を「降順」に出来ないでしょうか?
 以下の様にプログラムしております。

 
 Sub test()

  For p = 1 To 150
  Range("G15").Value = p
  ActiveSheet.PrintOut copies:=1
  Next
  End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


  For p = 150 To 1 Step -1
 で。
(Mook) 2014/09/06(土) 08:00

早速のご指導有難う御座います。
 希望どうりの作業が出来るようになりました。
ついでに欲を言えば、現在プログラム上での印刷部数の変更を、Excel画面で
 出来る様にはなりませんか? 重ねてお願い致します。
(mikineko) 2014/09/06(土) 08:20

 連番毎の印刷部数?(例えば2と設定したら、150-150-149-149-148-148・・・)
 それとも連番の数量?(例えば100と設定したら100-99-98-97・・・)

 後者だとして、A1セルに印刷したい枚数入れれば、こんな感じでいいんでない?
 For p = Range("A1").Value To 1 Step -1

 ただ、エラー処理してないから、数値以外や空白になったら止まると思うけど・・・

(稲葉) 2014/09/06(土) 08:35


 参考になると思います。

 Excel(エクセル)VBA入門:対話型処理2(InputBox関数,InputBoxメソッド)

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_inputbox.html
(カリーニン) 2014/09/06(土) 08:48


 他には、セルで受け渡しをするとか。

 Dim maisu As Integer
 Dim rng As Range
  Set rng = ActiveSheet.Cells(1, 1)
  If IsNumeric(rng.Value) Then maisu = rng.Value
  MsgBox maisu
  Set rng = Nothing
(カリーニン) 2014/09/06(土) 08:52

有難うございました。

 早速8日からの業務で活躍出来ます。

(mikineko) 2014/09/06(土) 09:20


 本当にごめんなさい。またもやお聞きしたき事があります。

プリンタートレイのセット部数が50枚が限度で、一回目(50〜1)は問題ありませんが、2回目以降(100〜51)の場合などと Excel画面上で(100〜51)と表示させ、実行方法を教えて頂けないでしょうか。

 宜しくお願い致します。
(mikineko) 2014/09/06(土) 10:44


 >他には、セルで受け渡しをするとか。

 既に稲葉さんが提示されてましたね。失礼しました。

 >2回目以降(100〜51)の場合などと Excel画面上で(100〜51)と表示させ、実行方法を教えて頂けないでしょうか。 

 現状のコードをご提示ください。
(カリーニン) 2014/09/06(土) 10:46

 すみませんでした、以下のとうりです。

Sub test()
For p = Range("E2").Value To 1 Step -1
Range("D5").Value=p
ActiveSheet.PrintOut Copies:=1
Next
End Sub

(mikineko) 2014/09/06(土) 10:59


 ぜんぜん現状を参考にしていませんが、InputBox を使用した例です。 
 入力は 「開始-終了」 なので 1-10 と 10-1 は逆順序になります。

 Sub Sample()
    Const トレイ枚数 = 50
    Dim 範囲 As String
    Dim 開始 As Long
    Dim 終了 As Long
    Dim ステップ As Long
    Dim 印刷残り枚数 As Long
    Dim 中断枚数 As Long
    Dim 中間終了 As Long
    Dim 印刷位置 As Long
    Do While InStr(範囲, "-") = 0
        If Range("E2").Value <> "" Then
            範囲 = InputBox("印刷範囲を指定してください。", "印刷範囲", Range("E2").Value & "-1")
        Else
            範囲 = InputBox("印刷範囲を指定してください。", "印刷範囲", "150-1")
        End If
    Loop
    開始 = CLng(Split(範囲, "-")(0))
    終了 = CLng(Split(範囲, "-")(1))
    ステップ = IIf(開始 <= 終了, 1, -1)

    For 印刷位置 = 開始 To 終了 Step ステップ
        If 中断枚数 = 0 Then
            印刷残り枚数 = Abs(終了 - 印刷位置) + 1
            中間終了 = (印刷位置 + (トレイ枚数 - 1) * ステップ)
            If ステップ > 0 Then
                中間終了 = Application.Min(中間終了, 終了)
            Else
                中間終了 = Application.Max(中間終了, 終了)
            End If
            MsgBox _
                印刷位置 & " 〜 " & 中間終了 & "を印刷します" & vbNewLine _
                & Application.Min(トレイ枚数, 印刷残り枚数) & "枚以上をトレイにセットして OK を押してください。"
            中断枚数 = Application.Min(トレイ枚数, 印刷残り枚数)
        End If
        中断枚数 = 中断枚数 - 1
        Range("G15").Value = 印刷位置
        ActiveSheet.PrintPreview
    Next
 End Sub

 本当は紙切れを検出して中断したいところですけれど、API やら結構面倒そうなので・・・。

(Mook) 2014/09/06(土) 11:33


大変遅くなりましたが、何とか出来る様になりました。
本当に有難う御座いました。
(mikineko) 2014/09/09(火) 07:14

コメント返信:

[ 一覧(最新更新順) ]


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