プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

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
    • good
    • 0
この回答へのお礼

ありがとう御座いました。これに近い物を書いてはいたんですが、
Else に対する If がないとか If に対する End がないとか
が出てきて困っていました。EndIf が2個必要だったのですね。
ありがとう御座いました。

お礼日時:2007/02/22 16:36

エラー処理などでは、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
    • good
    • 0

>何度やってもうまくいかず、やむなく昔ベーシックで習った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
    • good
    • 0
この回答へのお礼

有難う御座います。それぞれの回答で EndIf の使用方法と場所が違うので、よく流れを見て研究します。有難うございました。

お礼日時:2007/02/22 16:45

こんにちは。


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

でどうでしょうか。
    • good
    • 0
この回答へのお礼

すばやい回答有難う御座います。ExitSub も試してみましたが、その直後に EndIf をつけずにエラーになっていました。おかげで解決しました。有難うございました。

お礼日時:2007/02/22 16:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!