[[20060601144714]] 『検索番号の順次繰り上げと、順次印刷のマクロ』(初老人) ページの最後に飛ぶ

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

 

『検索番号の順次繰り上げと、順次印刷のマクロ』(初老人)

マクロのことはあまりよくわからない初心者です。
以下のようなマクロが組めないか、どなたか教えて頂きたくお助け下さい。

「シート1」に請求書のフォームが作成されており、その印刷範囲外に検索番号を入力するセルが設けてあります(例えばA3)。
このA3のセルに検索番号として1を入力すると、1番に見合った請求内容(相手先、金額内訳等)が他のシートからフォームに転写され、請求書が完成するように関数・数式でつないでありますので、印刷を実行します。次に検索番号2を入力し、2番に見合った請求内容を印刷します。このように検索番号を1、2,・・・最終(例えば500)と入力し印刷する手順をマクロ化したいのですが、どのようなマクロをつくればよいのか教えていただきたいのです。

ポイントは:
 検索番号1(手入力)・・・印刷
 検索番号2(手入力)・・・印刷
    ・
    ・
    ・
 検索番号500(最後)・・・印刷

の手順ををマクロ化したいのです。なお欲をいえば、途中で「停止」、「続行」、「最終検索番号の変更」などが出来るようになっていればなお良いのですが(欲張り過ぎですか)

どなたかよろしくお願いいたします。
EXCELはoffice 2003です。 


 回答でなくてすみません。
 一度、マクロの自動記録でご希望の動作を記録させてみてはいかがでしょうか?
 その後で「ここをこうしたい」と具体的にご相談されたほうが
 回答者の皆さんもお答えしやすいと思います。

 マクロは(も?)さっぱりなのでお力になれずに申し訳ありません。  (ぷーのすけ)

昨日おたずねした初老人です。ぷーのすけさんのアドバイスに従い、マクロの自動記録で下記のようなマクロを一部作成してみました。

  Range("A3").Select

    ActiveCell.FormulaR1C1 = "1"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "2"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "3"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "4"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "5"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "7"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "8"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "9"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveCell.FormulaR1C1 = "10"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

このActiveCell.FormulaR1C1 = "10"の10の箇所をプリントするごとに、順次番号を繰り上げて例えば”500”位まで自動的に印刷したいのです。
この最終地値はデータにより変わりますので、手動で最終値を自由に設定できるようにしたいことと、昨日も書いたように途中でマクロの「停止」、「続行」、「キャンセル」、「最終番号の変更」などができるようにしたいのですが、どなたかお助け下さい。


 一例としてですが,,

 dim i as integer
 i=1
 Do while i<51
    Activecell.Value=i
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    i=i+1
 Loop
 (seiya)
 ご質問を最後まで読んでいませんでした。
 マクロの強制中断は Esc または Ctrl + Break で出来ますが
 ご要望の通りにするには、OSに情報を渡すコードが必要になると思いますが?

seiyaさんありがとうございました。
これで当面の難問は解決できたようです。当初いただいたステートメントをいれてテストを実行したとろ、大量に印刷されて大慌てしました。いまは、枚数を少なくしてテスト中です。私の欲張りな要求はなんだかむずかしをうなのであきらめます。
ところで、この命令文で、最初30枚くらい印刷し、またその後31枚から30枚くらい印刷するようなマクロは出来ますでしょうか。そうすれば小刻みに確認しながら印刷できますが、頂戴した命令文では、一度中断するとまた最初から印刷してしまうのではないでしょうか。
甘えついでに、なにかよい方法がありましたらお教え下さい。

 1) 最初30枚くらい.....
  i=1 を i=activecell.value + 1 にしたらいかがですか?
  もちろん1からスタートさせるには、0を入力しておく必要があります。

 2) 一度中断すると....
  そのようなことは無いと思いますが?
  中断した段階で他の作業は出来ませんが、ツールバーの実行ボタンを押せば
  続行すると思います。
 (seiya)

 1枚1枚、確認して印刷するものを作っちゃいました。。。
 1枚1枚【OK】をクリック or Enter しなくちゃなので、、、
 作業効率は悪いです。。。
 
Sub 初老人()
Dim i As Long
    Do
        i = i + 1
        Range("A3") = i
        Select Case MsgBox(prompt:="印刷を開始しますか?", Buttons:=vbYesNoCancel)
            Case 6
                ActiveSheet.PrintOut
            Case 2
                MsgBox "中止します": Exit Sub
        End Select
    Loop Until Range("A3") = 500
End Sub
 
 お遊び程度って事でW
 (キリキ)(〃⌒o⌒)b

 キリキさん
 グッドアイデア!
 どうせなら無限ループにして、
 msgbox でcancel or vbnoでExitするっていうのもいいかも?
 (seiya)
 はは、そういう具合になってますね...
 後は、枚数を指定できるようになか?

 >キリキさん
 >グッドアイデア!
 うぉぉぉ〜〜〜!!!
 seiyaさんに、誉められた〜♪(?)
 凄く嬉しぃ〜

 でも、実用性無いですよね。。。

 >msgbox でcancel or vbnoでExitするっていうのもいいかも?
 そうか!
 条件つけないでもいいんだ〜
 終わりにしたいときだけ、キャンセルしちゃえばいいんだもんね〜
 
 リベンジ!!
Sub 初老人()
Dim L_P
Dim i As Long
    L_P = Application.InputBox(prompt:="最終ページを入力してください。", Type:=1)
    Do
        i = i + 1
        Range("A3") = i
        Select Case MsgBox(prompt:=" " & i & " を印刷を開始しますか?", Buttons:=vbYesNoCancel)
            Case 6
                ActiveSheet.PrintOut
            Case 2
                MsgBox "中止します": Exit Sub
        End Select
    Loop Until Range("A3") = L_P
End Sub
 
 (キリキ)(〃⌒o⌒)b


 キリキさん
 初老人さんになったつもりでお願いします。
 もう一つ上にDo Loop を挿入して、
 msgbox をはさんじゃうのは?
 つまり、今のコードをそのままループさせてしまうのです。
 エラー処理が必要になりますけど....
 (seiya)
 お願いしていて申し訳ありませんが、そろそろ落ちなくてはなりません。
 また明日、拝見させていただきます。
 ----
 >もう一つ上にDo Loop を挿入して、
 >msgbox をはさんじゃうのは?
 う〜ん。。。
 いまいちよくわかりません、、、
 折角、seiyaさんに宿題頂いたのに・・・
 
 >初老人さんになったつもりでお願いします。
 まだ、σ(^o^;)が初老人さんの気持ちになれていない・読みきれていないところがあるからなのかな〜?
 
 (キリキ)(〃⌒o⌒)b

 こんな感じでしょうか。
 テストできませんので、不具合があるかもしれません。

 Sub 初老人 ()
 Dim L_P
 Dim i As Long
 Dim Res As Integer
 Dim msg As String
 Dim Finish As Integer

 Do
   If IsEmpty(Range("a3")) Then 
      Range("a3").Value=0
      msg="印刷を開始しますか?"
   Else
      msg="印刷を続行しますか?"
   End If
   i =Range("a3").Value
   i=i+1
   Do 
     On Error Resume Next
     Res=Application.InputBox ("印刷枚数を入力してください",msg,default:="開始ページ" & i ,Type:=1)
     If Res="" then
        If vbYes=MsgBox("印刷を終了しますか?",vbYesNo) then End
     End if
   Loop Until Res>=1 
   On Error GoTo 0
   Finish=i+Res
   Do While i<=Finish
      Range("a3").Value=i
      ActiveSheet.PrintOut
      i=i+1
   Loop
 Loop
 End Sub
 (seiya)


 >Application.MsgBox 
 こちらは、InputBox ですよね?
 
 それと、こちらはいつ終わるのでしょう?
 
 でも、イメージはわかりました^^
 (キリキ)(〃⌒o⌒)b

 そうでした...
 少し変更しました。
 (seiya)

seiyaさん、キリキさん
いろいろありがとうございます。いろいろなマクロがあるものですね。もっとも私にはさっぱりわかりませんが。
「テストできませんので、不具合があるかもしれません。」との注釈付のマクロがなにか良さそうなので、取り込んで試してみましたが、動かすと
1.まず「型が一致しません」となってうごきません。デバッグで見ると
 i =Range("a3").Value の所が黄色になっていますが、直し方がわかりません。
2.頂いたマクロ文でそのままでテストしてみると、開始ページの窓枠で、数字を入れると「数値が正しくありません」と出てしまいます。

結局どうすればよいかわかりません。いろいろキリキさんとやりとりをされているようですが、最終的にどんなマクロになるのでしょうか。(先生方におまかせで申し訳ありません。もっと自分も勉強しなければ・・・)
で、さしあたって2〜3日中に大量の印刷をしなければならな部分については、最初にseiyaさんに一例として頂いたマクロ文で、苦肉の策として
dim i as integer

 i=1
 Do while i<51
の箇所の「i=1」と「i<51」の箇所の数字を50枚づつ印刷できるように書き換えては実行して、今日休日出勤でなんとか約1000件の印刷を行いました。まずはありがとうございました。なぜ50枚づつに区切ったかと云うと、プリンターが追い付かなくて途中で止まってしまう恐れがあったからです。
今後もう少し時間がありますが、別の請求書をやはり1000枚以上印刷しなければならないので、それまでになんとかよいマクロを教えて頂けるとありがたいのですが。
なんとかよろしくお願いします。(頼りになるのは、先生方だけ)

 >1.まず「型が一致しません」・・・
 これは、ちょっとわかりません。。。
 初老人さんのエルセルは2003ですよね?
 σ(^o^;)も同じ環境なのですが、そのようなメッセージは出ませんでした。
 
 >2.頂いたマクロ文でそのままで・・・数値が正しくありません」と出てしまいます。
 こちらは、
 InputBox を使用し、Type:=1 を指定していますので「数値」しか入力できないようになっています。
 数値を入力してください。
 ここで気を付けなくてはいけないのは『開始ページ○』と、はじめに入っていますが
 上書入力してください。
 開始ページ の部分を残さないように。
 
 >最終的にどんなマクロになるのでしょうか。
 seiyaさんが修正してくれてますので、現在のものが最終的なマクロと考えていただいていいのではないでしょうか?
 
 (キリキ)(〃⌒o⌒)b


 すみません、当方依然としてExcelが使用できません。

 >「型が一致しません」
 変数 i とA3のデータ型が一致しないという事ですよね?
 具体的にA3にはどのようなデータが入っていますか?セルの書式は標準になっていますか?
 マクロを実行する際に、該当するシートはアクティブになっていますか?

 >数値が正しく....
 多分、全角でもOKだと思うのですが念のため英数入力してみてください。

 (seiya)


コメント返信:

[ 一覧(最新更新順) ]


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