• 締切済み

連続印刷中のMsgBox

エクセルVBAで作業をしています iをFor・・・Nextで回し50枚程度の印刷を行うのですが、 途中15枚程度で続行か中止かをMsgBoxで振り分けを行いたいのですが プリントOUT処理の後 If i = 10 Then     ans2 = MsgBox("15枚印刷しましたまだ続けますか?", vbYesNo + vbInformation, "印刷実行")     Select Case ans2      Case vbYes     Select Case ans2      Case vbNo      Exit For      End Select Next i  End With  End Select End Sub 書くとNextに対するFORがありませんと出ました どうすれば良いでしょうか

みんなの回答

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.2

単に if 文に対する End If 文が無いからでは? if i = 10 Then     ans2 = MsgBox("15枚印刷しましたまだ続けますか?", vbYesNo + vbInformation, "印刷実行")     Select Case ans2      Case vbYes     Select Case ans2      Case vbNo      Exit For      End Select   End If '******** Next i  End With  End Select

masaojisan
質問者

お礼

ありがとうございます 私もそれを思ったのですが 分かった事ですが END IFだけでは駄目で Select Case ans2      Case vbYes が不要でした 上記を書いたまま END IF を入れるとEND IFに対するIF文が有りませんってとエラーが出たので迷っていました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>iをFor・・・Nextで回し50枚程度の印刷を行うのですが、 提示されたコードではそのようになっていません。 iが10なのに、メッセージが15ページというのも・・・。 エラーメッセージの通り、Forがありませんし、IF文も完結していません。 Select Case 文も無駄(意味がない)です。 50枚って、同じ物を50枚でしょうか? それとも1ページから50ページと言うことですか? 出来れば印刷部分のコードを全て提示してください。

masaojisan
質問者

補足

解答頂いて申し訳ないのですが 私の書いた文面に不適切なところも有るかと思いますが、もう少し 読んで解答下さい。 回答頂きたい内容は ”Nextに対するFORがありません”のエラーに対してですが、FORはずっと上位で書いています、中文を削除してプリントOUT後だけを明記しました。 10はテスト的に行おうかと10にしただけですよその辺りはこの質問とは関係ないはずですが何故つっこむのでしょうか 50枚は全然違った物です、別シートのデータより貼り付け印刷です 以上ですが分かって頂けますか

関連するQ&A

  • VBAエクセルにて印刷

    こんにちわ。教えてください。VBAでActiveXコントロールをクリック したのち、印刷のプレビューを表示したら、MegBoxメッセージを表示 させ ”はい””いいえ”を選択したいのですがうまくいきません。 ちなみに下記のプログラムです。 Private Sub 印刷_Click() ActiveWindow.SelectedSheets.PrintPreview Dim ans As Integer ans = MsgBox("印刷しますか?", vbInformation + vbYesNo, "確 認") Select Case ans Case vbYes Application.ActivePrinter = "Canon iR C3080/C3580 LIPSLX on Ne05:" ExecuteExcel4Macro "PRINT(2,1,1,1,,,,,,,,2,,,TRUE,,FALSE)" Case vbNo MsgBox "故障履歴印刷をキャンセルします。" End Select End Sub 以上なんですがプレビュー後に”印刷しますが”が聞いてきません。 どうすればいいですか?

  • Private sub の使い方

    Private Sub Worksheet_Activate() Dim ANS As Integer ANS = MsgBox("Bをクリアしてもいいですか?", _ vbYesNo + vbInformation, "クリア実行") If Sheets("B").Range("D6").Value <> "" Then Select Case ANS Case vbYes Sheets("営業確認").Range("D6:E1000").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" End Select Else End If End Sub 質問 『A』のシートを開いた時に『B』のシートのD6に値があれば、MsgBoxを出すようにしたく上記のマクロを組みましたが、値が無くてもMsgBoxが表示されてしまいます。 どこがおかしいのかアドバイスをお願いします。

  • シートのマクロについて

    sheet1 をアクティブすると下記のマクロが実行されるようにしたのですが なかなかうまくいきません。 どなたか教えて下さい。 Sub クリア() Dim ans As Integer ans = MsgBox("全てクリアをしてもいいですか?", _ vbYesNoCancel + vbInformation, "クリア実行") Select Case ans Case vbYes Sheets("sheet1").Select Range("B4:W43,Z4:Z43,AA4:AA43").Select Selection.ClearContents Range("B4").Select Sheets("sheet1").Select Case vbNo MsgBox "NO" Case Else MsgBox "中止します" End Select End Sub

  • 文字制限方法。

    どなたか知識ある方、教えてください。 ソートプログラムの演習をしているんですが、 どのように書いていいか悩んでます。現在の課題はtextが10個あり、sortボタンをクリックすると左から数字を小さい順に並びます、数字のみ入力可、空白でもエラーなしで(全て空白はエラー)とりあえず数字があれば10個埋めていなくても並べる、文字等はエラーを出したいです。 '配列のインデックス番号の開始に1を設定 Option Base 1 Option Explicit Private Sub cmdCLEAR_Click() '変数の宣言 Dim ans As Integer Dim i As Integer '消去する際の確認事項 ans = MsgBox("消去していいですか?", vbYesNo + vbQuestion) Select Case ans Case vbYes For i = 1 To 10 Step 1 Text(i).Text = "" Next i Case vbNo MsgBox "取り消します", vbInformation End Select End Sub Private Sub cmdSORT_Click() '変数の宣言 Dim intNum(10) As Integer Dim S As Integer Dim j As Integer Dim k As Integer Dim i As Integer '配列の整理 For i = 1 To 10 Step 1 intNum(i) = Int(Text(i).Text) Next i 'バブルソート For k = 1 To 9 Step 1 For j = 1 To 9 Step 1 If intNum(j) > intNum(j + 1) Then S = intNum(j) intNum(j) = intNum(j + 1) intNum(j + 1) = S End If Next j Next k '結果を返して表記する For i = 1 To 10 Step 1 Text(i).Text = intNum(i) Next i End Sub 現在書いたのはここまででどうしてもエラーと文字制限の方法はわからないので教えていただける方、宜しくお願いします。

  • IFの使い方

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ANS As Integer ANS = MsgBox("Aをクリアしてもいいですか?", _ vbYesNoCancel + vbInformation, "クリア実行") If Sheets("A").Range("6D").Value <> "" Then Select Case ANS Case vbYes Sheets("営業確認").Range("b6:e1000,g6:k1000").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" Case Else MsgBox "中止します" End Select Else End If End Sub 説明 (1)『A』というシートのセル『D6』に値が残っていれば メッセージボックスを出す。 (2)メッセージボックスはyes,no,cancelボタンがある (3)YESなら指定したセルの値を消す (4)NOなら消さない (5)キャンセルなら(3)、(4)以外 (6)『A』の『D6』に値がなければメッセージは出ない 上記のようにマクロを組みましたが、IFの所がエラーになってしまいます。

  • 【VBA】コンパイルエラーについて

    Excelシートが5枚あり、 MsgBoxを使って、印刷したいシートの場合はOKボタンを押下し印刷します。 1枚目のシートが終わったら、2回目の MsgBoxがでて、印刷するかを判定します。 以下のような、VBAを記述したのですが、なぜかコンパイルエラーになってしまいます。 ※NEXTに対応するFORがありませんとエラー表示されます どこが誤りになるのか教えていただけると助かります。 お手数お掛けいたしますが、よろしくお願い致します。 ================================================================ Sub 必要なシートだけ印刷() Dim i As Long For i = 1 To 5 '←処理を5回繰り返す Worksheets("シフト表(" & i & ")").Select rc = MsgBox("印刷するシフト表を選択します。" & vbCrLf & "シフト表(" & i & ")""を印刷しますか?", vbYesNo + vbQuestion, "確認") 'もしyesを選択したら If rc = vbYes Then ActiveSheets.PrintOut '←印刷する Next i Exit Sub '←プロシージャから抜け出る End If End Sub ================================================================

  • プログラムのイベント処理中断方法

    VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: end sub

  • 休暇願をVBA作成し両面印刷する方法を教えてほしい

    VBAで休暇願を作成し印刷時は差し込み印刷方法でA4用紙に両面印刷したいのですが書き方が判りません。 マクロの内容を添付しますので両面印刷できるようにするにはどのように書けばよいのか教えてください。 下記のマクロで片面印刷は可能です。 Sub 印刷() Dim LastRow As Long Dim i As Long Dim myNo As Long If vbNo = MsgBox("印刷を開始していいですか?", vbYesNo) Then Exit Sub With Worksheets("名簿マスター") LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 1 To LastRow myNo = .Range("A" & i).Value With Worksheets("印刷シート") .Range("f7").Value = myNo .PrintOut Copies:=1, Collate:=True End With Next i End With MsgBox "印刷が終わりました" End Sub

  • VBAのエラー処理がうまくいきません!?

    下記のようなマクロを見よう見まねで作りました。 K13:K43に入れた文字列としての計算式を隣りのJ列に計算された答えを入れるというものです。 うまく動いたのですが、式が間違っている場合、エラーになるのでエラー処理をいれてみました。 On Error GoTo Trapと Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" の3行を新たに挿入しましたが、どういうわけか全部がエラーになってしまいMsgBoxが出てしまいます。 どこが間違ったのでしょうか? Sub 包括料算() Dim i As Long Sheets("包括明細").Select For i = 1 To 30 If Range("K" & i + 13) <> "" Then 'K列14~43行で空白以外のセルの場合 On Error GoTo Trap 'エラーの時Trapへ Range("J" & i + 13).Formula = "=ROUND(" & Range("K" & i + 13).Value & ",2)" 'J列14~43行に式としていれる Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" End If Next A% = MsgBox("入力完了ですか?" _ + Chr(&HD) + Chr(&HA) + "", vbYesNo + vbQuestion, "確認") Select Case A% Case vbYes 包括終了 '終了用マクロへ Case vbNo Exit Sub End Select End Sub

  • マクロ作動

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) tm = Time() '現在時間を取得 If tm < TimeValue("08:30:00") Then Exit Sub If tm > TimeValue("09:30:00") Then Exit Sub  Dim ANS As Integer  Dim 値 As String If Sheets("営業確認").Range("D6").Value <> "" Then ANS = MsgBox(Sheets("営業確認").Range("B6") & "のデーターが残っています。クリアしますか?", _ vbYesNo) Select Case ANS Case vbYes Sheets("営業確認").Select Sheets("営業確認").Range("B6:E461").Select Selection.ClearContents Sheets("営業確認").Range("G6:K461").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" End Select Else End If End Sub プログラムを組みましたが、上記のとおり時間設定している間は『キャンセル』をしてもセルを動かす度にマクロが動いてしまいます。 下記のようなマクロは可能でしょうか。 (1)一番最初にシートが開くとマクロが作動 (2)その後、指定してるシートに値があってもマクロは作動しない (3)また翌日シートを開くとマクロが作動 ※1日1回マクロが作動出来ればいいです

専門家に質問してみよう