[[20160425161614]] 『Do Loopを使って印刷しようとしたら止まらない』(がんばるVBA) ページの最後に飛ぶ

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

 

『Do Loopを使って印刷しようとしたら止まらない』(がんばるVBA)

こんにちは。
B1にある文字をF18(セル結合してF18〜I18)にコピペし印刷、次にB2にある文字を同じくF18にコピペし印刷というマクロをつくりました。Bセルに入力されている範囲がB5までであったりB10までであったりするので、RowPos+1という形でB○セルが空欄になったらLOOPを抜けるとして印刷をしたところ、抜け出せなくなり印刷が止まらなくなってしまいました。Loopを終了させる為にはどのようなコードを使えばよいのでしょうか・・・?

With ActiveSheet

 Dim i As Byte
  RowPos = 1

 Do
    Cells(1, 2).Select
    Selection.Copy
    Range("F18:I18").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False

    RowPos = RowPos + 1

    Cells(RowPos, 2).Select
    Selection.Copy
    Range("F18:I18").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False

   Loop while Cells(RowPos,2).value = ""  

End With

End Sub

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


While ではなく、Until だったり?
(???) 2016/04/25(月) 16:56

すみません。間違えてました。
Loop UNTIL Cells(RowPos,2).value = "" と、UNTILとやっておりました。
最後に書いたから悪かったのか?と思い、 Do のあとに続けて UNTIL・・・とかいて最後にExit Doも
書き入れてみたのですが、だめでした・・・
印刷が一度始まると果てしなく印刷が始まり、エクセルさえ終了できず「タスクの終了」で強制的にエクセルを閉じました。

(がんばるVBA) 2016/04/26(火) 09:56


 原因かどうかはわからないが。
 (あとこちらへの書き込み時のミスかもしれないが)
 >With ActiveSheet 
 としているのにCellsやRangeの頭に「.」がなく全く使われていないのは?

(ねむねむ) 2016/04/26(火) 09:59


   Loop until trim(Cells(RowPos,2).value) = ""  
(abc1965) 2016/04/26(火) 10:17

ねむねむ様
ご回答ありがとうございます。 「.」についてはエクセル画面左下にある「マクロの記録」なるものを使いそれを加工しました。その時からすでに「.」は書かれておらず、Loop記述前までは特に問題がなかったものですので気にしておりませんでした。(ですのでこちらへの書き込み時のミスではありません)
abc1965様
ご回答ありがとうございます。とりあえず、印刷は止まるようになりました(^^;)ただ、B1,B2,B1,B3,B1,B4という印刷がされてしまいした。
恐らくDoの後のCells(1, 2).Select に戻ってしまったためと思ったので、Cells(RowPos,2)にしてみましたが同じ結果でした。B1に戻らずB2,B3・・となるようにする為にはどうしたらよいでしょう...

(がんばるVBA) 2016/04/26(火) 11:39


 プリントまでは試していませんが・・・

 Sub test()

     Dim i As Long, LastRow As Long

     LastRow = Cells(Rows.Count, 2).End(xlUp).Row

     i = 1
     Do
         Range("F18").Value = Range("B" & i).Value
         ActiveSheet.PrintOut
         i = i + 1
     Loop Until i > LastRow

 End Sub
(se_9) 2016/04/26(火) 11:52

se_9様
ありがとうございます!できました! LastRow の使い方は目からうろこでした。
勉強になります。
皆様、ありがとうございました!
(がんばるVBA) 2016/04/26(火) 12:01

コメント返信:

[ 一覧(最新更新順) ]


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