Excel VBA 連番印刷
昨日以下の質問をさせていただいた者です。
http://okwave.jp/qa/q8349562.html
こちらで教えていただいた以下のコードに、
J2のセルに連番を振るコードを付け足したいと思い、
同じくこちらのサイトの過去の履歴にあった以下コードを参考にとやってみているのですが、
Next で指定された変数の参照が無効です。と言われてしまいます…
印刷部数の指定はいらず、sheet印刷のJ2セルに1から始まる連番を振りたいのです。
どのように修正をしたらいいのかご教示願います。
Sub Sample4()
Dim i As Long, endRow1 As Long, endRow2 As Long, myArea1 As Range, myArea2 As Range
Dim wS1 As Worksheet, wS2 As Worksheet, wS3 As Worksheet
Set wS1 = Worksheets("DB")
Set wS2 = Worksheets("印刷")
Set wS3 = Worksheets("Sheet3")
endRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS1.Cells(1, "A"), wS1.Cells(endRow1, "A")).AdvancedFilter Action:=xlFilterInPlace, unique:=True
wS1.Range("A:A").Copy wS3.Range("A1")
wS1.ShowAllData
For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row
endRow2 = wS2.Cells(Rows.Count, "B").End(xlUp).Row
If endRow2 > 9 Then
Range(wS2.Cells(10, "B"), wS2.Cells(endRow2, "H")).ClearContents
Range(wS2.Cells(10, "J"), wS2.Cells(endRow2, "J")).ClearContents
End If
wS1.Range("A1").AutoFilter field:=1, Criteria1:=wS3.Cells(i, "A")
wS2.Range("B6") = wS3.Cells(i, "A")
Set myArea1 = Range(wS1.Cells(2, "B"), wS1.Cells(endRow1, "H")).SpecialCells(xlCellTypeVisible)
Set myArea2 = Range(wS1.Cells(2, "I"), wS1.Cells(endRow1, "I")).SpecialCells(xlCellTypeVisible)
myArea1.Copy
wS2.Activate
ActiveSheet.Range("B10").Select
Selection.PasteSpecial Paste:=xlPasteValues
myArea2.Copy
wS2.Activate
ActiveSheet.Range("J10").Select
Selection.PasteSpecial Paste:=xlPasteValues
endRow2 = wS2.Cells(Rows.Count, "B").End(xlUp).Row
'Range(wS2.Cells(1, "A"), wS2.Cells(endRow2, "J")).PrintOut
Next i
wS1.AutoFilterMode = False
wS3.Cells.Clear
End Sub
連番印刷のコード
Sub NumberPrint()
Dim idx As Integer
Dim res
res = Application.InputBox("印刷部数を入力してください", Type:=1)
If res > 0 Then
For idx = 1 To res
Range("AW3").Value = idx
ActiveSheet.PrintOut
Next idx
End If
End Sub
お礼
早速の回答と、丁寧な説明、自環境で再現テストまでしていただき、 本当にありがとうございました。 >>・一旦[標準]ビューで処理し、最後に[改ページプレビュー]設定する。 (;^_^A アセアセ・・・、ご指摘を受ける前にこの方法に気付くべきですよね... この事象は質問を書いている途中で気が付き、 そこまで頭がまわりませんでした。 →解消いたしました >>・ws_sheet2をActiveにして実行する。 ws_sheet2.Activateを挿入しOKでした。 →解消いたしました ただ、オリジナルのソースの方でも既にActivateは試していたのですが 、そちらは何故かNG、もっと複雑なソースなので別要因かもしれません。 >>・'* 改ページの挿入の直前に DoEvents を挿入する。 →解消いたしました >>・Application.ScreenUpdating = False で実行する。 こちらの環境ではNGでした。 Application.ScreenUpdating = False '* 改ページの挿入 ws_sheet2.Cells(idx_sentou + 1, 1).PageBreak = xlManual Application.ScreenUpdating = True >>ws_sheet3.Range("1:10").Copy ws_sheet2.Range("1:10") >>でもいいかな、という点と VB ならまだしも VBA となるとまるで素人で、よくわからず 作っております、ご指摘の通りに修正しました。 >>ws_sheet2.Cells(1, 1).Resize(9, 4).ClearContents >>のほうがいいかな、という点です。参考まで。 同じく、ご指摘の通りに修正しました。 こう言うアドバイスって素人には本当に助かります。 最終的には DoEvents 使用し解決とさせていただきました。 なにはともあれ、本当にありがとうございました。