VBA超初心者です。ヘルプだけで学習していますが、よくわかりません。印刷する時に、GT4かGU4の値が0の場合はエラーメッセージが出て終了し、いずれも0以外ならばその数値を印刷の開始と終了ページとして取得するプログラムを作ってみましたが、何度やってもうまくいかず、やむなく昔ベーシックで習ったGotoを使ってみました。
しかし、過去ログを見ると、Gotoは使わないほうが良いとの事。
この文でGotoをなくす方法をご教授下さい。お願いします。
Sub 印刷()
開始ページ = Range("GT4").Value
終了ページ = Range("GU4").Value
If Range("GT4") = 0 Then GoTo 10
If Range("GU4") = 0 Then GoTo 20
入力結果 = MsgBox((開始ページ) & "ページから" & (終了ページ) & "ページを印刷しますか?", vbYesNo)
If 入力結果 = vbYes Then
ActiveWindow.SelectedSheets.PrintOut From:=開始ページ, To:=終了ページ, Copies:=1, Collate _
:=True
GoTo 30
10: MsgBox ("未入力の項目があ~る!")
GoTo 30
20: MsgBox ("入力ミスがあります!")
30:
End If
End Sub
No.1ベストアンサー
- 回答日時:
Sub 印刷()
開始ページ = Range("GT4").Value
終了ページ = Range("GU4").Value
If Range("GT4") = 0 Then
MsgBox ("未入力の項目があ~る!")
ElseIf Range("GU4") = 0 Then
MsgBox ("入力ミスがあります!")
Else
入力結果 = MsgBox((開始ページ) & "ページから" & (終了ページ) & "ページを印刷しますか?", vbYesNo)
If 入力結果 = vbYes Then
ActiveWindow.SelectedSheets.PrintOut From:=開始ページ, To:=終了ページ, Copies:=1, Collate :=True
End If
End If
End Sub
ありがとう御座いました。これに近い物を書いてはいたんですが、
Else に対する If がないとか If に対する End がないとか
が出てきて困っていました。EndIf が2個必要だったのですね。
ありがとう御座いました。
No.4
- 回答日時:
エラー処理などでは、On error goto を使うのでそれほどこだわらなくて良いかとは思いますが、
簡単なのはフラグとループを使う方法です。(ここではフラグだけでよい)
Dim fContinue as boolean
fContinue = true
初期化
if Range("GT4") = 0 Then
MsgBox ("未入力の項目があ~る!")
fContinue = false
end if
if fContinue = true and Range("GU4") = 0 Then
MsgBox ("入力ミスがあります!")
fContinue = false
end if
if fContinue = true then
入力&印刷
end if
No.3
- 回答日時:
>何度やってもうまくいかず、やむなく昔ベーシックで習ったGotoを使ってみました。
IF文の使い方が理解できていれば簡単に回避できます。
Sub 印刷2()
開始ページ = Range("GT4").Value
終了ページ = Range("GU4").Value
If 開始ページ = 0 or 開始ページ = "" Then
MsgBox ("未入力の項目があ~る!")
ElseIf 終了ページ = 0 or 終了ページ = "" Then
MsgBox ("入力ミスがあります!")
Else
入力結果 = MsgBox((開始ページ) & "ページから" & (終了ページ) & _
"ページを印刷しますか?", vbYesNo)
If 入力結果 = vbYes Then
ActiveWindow.SelectedSheets.PrintOut _
From:=開始ページ, To:=終了ページ, Copies:=1, Collate:=True
End If
End If
End Sub
No.2
- 回答日時:
こんにちは。
Sub 印刷()
開始ページ = Range("GT4").Value
終了ページ = Range("GU4").Value
If Range("GT4") = 0 Then
MsgBox ("未入力の項目があ~る!")
Exit Sub
End If
If Range("GU4") = 0 Then
MsgBox ("入力ミスがあります!")
Exit Sub
End If
入力結果 = MsgBox((開始ページ) & "ページから" & (終了ページ) & "ページを印刷しますか?", vbYesNo)
If 入力結果 = vbYes Then
ActiveWindow.SelectedSheets.PrintOut From:=開始ページ, To:=終了ページ, Copies:=1, Collate _
:=True
End If
End Sub
でどうでしょうか。
すばやい回答有難う御座います。ExitSub も試してみましたが、その直後に EndIf をつけずにエラーになっていました。おかげで解決しました。有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントで参照ページを...
-
<IFRAME>でコンテンツ部分のみ...
-
TEX ページ番号について
-
VBAでマルチページのページ指定...
-
エクセルVBAでマルチページの切...
-
HIPOをくわしく知りたい
-
検索エンジンにインデックスさ...
-
indexページをタイマーセットで...
-
フレームページからインライン...
-
HP、更新したことをお知らせす...
-
JavaScriptを使わず階層式メニュー
-
セルの高さをiframe内のページ...
-
SEO対策無双みう氏のSEO対策は...
-
ホームページ作成で,PDFファイ...
-
ページ内の検索窓を作りたい。
-
「リロード」ボタンをページ内...
-
ページの自動ジャンプを止めるには
-
検索結果を別ページのインライ...
-
マルチページの初期表示ページ...
-
メニューやフッターの一括更新
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントで参照ページを...
-
各ページの1番上の表示について
-
<IFRAME>でコンテンツ部分のみ...
-
VBAでマルチページのページ指定...
-
エクセルVBAでマルチページの切...
-
UserForm.showでマルチページ1...
-
検索エンジンにインデックスさ...
-
ページの自動ジャンプを止めるには
-
単語を少し変えると1位になるの...
-
アクセス解析。「直前に見てい...
-
検索順位が下がった
-
TEX ページ番号について
-
地味なページはnofollowにする?
-
vbsで開かれた別ウィンドウを制...
-
Excel2007 VBA で2ページ目PDF
-
アクティブレポートの、ページ...
-
リダイレクト前のURLをブックマ...
-
VBAでWEBサーバー上に保存され...
-
TOMCATを入れたPCのHTMLが別PC...
-
アクセス元URLをばれないよ...
おすすめ情報