[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索番号の順次繰り上げと、順次印刷のマクロ』(初老人)
マクロのことはあまりよくわからない初心者です。
以下のようなマクロが組めないか、どなたか教えて頂きたくお助け下さい。
「シート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に情報を渡すコードが必要になると思いますが?
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)
結局どうすればよいかわかりません。いろいろキリキさんとやりとりをされているようですが、最終的にどんなマクロになるのでしょうか。(先生方におまかせで申し訳ありません。もっと自分も勉強しなければ・・・)
で、さしあたって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.