Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2735 / 13646 ツリー ←次へ | 前へ→

【66292】エラーメッセージ めぐたん 10/8/18(水) 17:22 質問[未読]
【66293】Re:エラーメッセージ マジビスプレスリー 10/8/18(水) 18:53 回答[未読]
【66299】Re:エラーメッセージ めぐたん 10/8/19(木) 11:24 発言[未読]
【66300】Re:エラーメッセージ kanabun 10/8/19(木) 11:38 発言[未読]
【66301】Re:エラーメッセージ kanabun 10/8/19(木) 11:42 発言[未読]
【66309】Re:エラーメッセージ めぐたん 10/8/20(金) 9:52 発言[未読]
【66310】Re:エラーメッセージ kanabun 10/8/20(金) 10:30 発言[未読]
【66311】Re:エラーメッセージ kanabun 10/8/20(金) 10:49 発言[未読]
【66316】Re:エラーメッセージ めぐたん 10/8/20(金) 17:15 お礼[未読]

【66292】エラーメッセージ
質問  めぐたん  - 10/8/18(水) 17:22 -

引用なし
パスワード
   何度も質問してすみません。

下記マクロを作っています。
CommandButton1を押した時の処理で、
ComboBox1、TextBox1、TextBox2が空白の時は、
エラーメッセージが出るようにしたいです。
3つのうちどれか1つでも空白の時は
必ず入力するように促す為にはどうしたらいいですか?

Private Sub CommandButton1_Click()
 
 Dim x As Long
  Select Case ComboBox1.Value
   Case "MB": x = 1
   Case "BK": x = 2
   Case "2B": x = 3
   Case "信金": x = 4
   Case "信組": x = 5
   Case "JA": x = 6
   Case "労金": x = 7
   Case "その他": x = 8
  End Select
 
 If ComboBox1 = "" Then
 intRet = MsgBox("区分を選択してください。", vbyesOnly + vbCritical, "区分選択")
  ComboBox1.SetFocus
 Else
 If (TextBox1 = "") Or (TextBox2 = "") Then
 intRet = MsgBox("ユーザー名を入力してください。", vbyesOnly + vbCritical, "ユーザー名入力")
  If (x = 6) Or (x = 8) Then
  TextBox2.SetFocus
  Else
  TextBox1.SetFocus
  End If
 End If
 End If
 If x <> 0 Then
 Cells(5, (x + 1)).End(xlDown).Offset(1).Value = (TextBox1.Value & TextBox2.Value)
 
 Unload UserForm1
 End If 
End Sub

【66293】Re:エラーメッセージ
回答  マジビスプレスリー  - 10/8/18(水) 18:53 -

引用なし
パスワード
   If ComboBox1 = "" And TextBox1 = "" Ane TextBox2 = "" Then
Msgbox "Fuck"
Exit Sub
End If

【66299】Re:エラーメッセージ
発言  めぐたん  - 10/8/19(木) 11:24 -

引用なし
パスワード
   ▼マジビスプレスリー さん:

>ご回答ありがとうございます。
>自分なりにも考えてこのように変えてみたのですが、
『Elseに対応するIfがありません』というエラーメッセージがでてしまいます。
なぜなのでしょうか?
自分なりには、このElseは必要なのですが・・・。
お分かりになる方、教えてください。

If ComboBox1 = "" Then
 intRet = MsgBox("区分を選択してください。", vbyesOnly + vbCritical, "区分選択")
  ComboBox1.SetFocus
Else
If (TextBox1 = "") Or (TextBox2 = "") Then
 intRet = MsgBox("ユーザー名を入力してください。", vbyesOnly + vbCritical, "ユーザー名入力")
  If (ComboBox1 = "JA") Or (ComboBox1 = "その他") Then
  TextBox2.SetFocus
  Else
  TextBox1.SetFocus
Else←ここの部分
 Dim x As Long
  Select Case ComboBox1.Value
   Case "MB": x = 1
   Case "BK": x = 2
   Case "2B": x = 3
   Case "信金": x = 4
   Case "信組": x = 5
   Case "JA": x = 6
   Case "労金": x = 7
   Case "その他": x = 8
  End Select
 
 If x <> 0 Then
 Cells(5, (x + 1)).End(xlDown).Offset(1).Value = (TextBox1.Value & TextBox2.Value)
 
 Unload UserForm1
 
 Cells(5, (x + 1)).End(xlDown).Select
 
  Dim mySheet As Worksheet
  Dim newSheet As Worksheet
  Dim myAddress As Range
  Dim myName As String
  Set mySheet = ActiveSheet
  Set myAddress = ActiveCell
  myName = myAddress.Value

  Sheets("m-20製品マスタ(売上)").Copy After:=Worksheets(Worksheets.Count)
  Set newSheet = ActiveSheet
  newSheet.Name = myName
  newSheet.Range("C2").Value = myName

  mySheet.Select
  mySheet.Hyperlinks.Add Anchor:=myAddress, Address:="", _
     SubAddress:=myName & "!d2", TextToDisplay:=myName

  myAddress.Hyperlinks(1).Follow NewWindow:=False, _
     AddHistory:=True
 
  mySheet.Select
  Cells(5, (x + 1)).End(xlDown).Select
   
  End If
  End If
  End If
  End If
   
End Sub

【66300】Re:エラーメッセージ
発言  kanabun  - 10/8/19(木) 11:38 -

引用なし
パスワード
   ▼めぐたん さん:

全部みてないけど、

>If ComboBox1 = "" Then
>  intRet = MsgBox("区分を選択してください。", , "区分選択")
>  ComboBox1.SetFocus
>Else

>  If (TextBox1 = "") Or (TextBox2 = "") Then
>   intRet = MsgBox("ユーザー名を入力してください。")
>   If (ComboBox1 = "JA") Or (ComboBox1 = "その他") Then
>     TextBox2.SetFocus
>    Else
>     TextBox1.SetFocus
    END IF  '◆

>  Else←ここの部分


◆ が無いのでは?

【66301】Re:エラーメッセージ
発言  kanabun  - 10/8/19(木) 11:42 -

引用なし
パスワード
   あと、
・インデントをきちんと付けて IF に対応する ELSE と END IF が
 書かれているか、チェックしやすくしましょう。

・プロパティは省略しないように

・If ComboBox1.ListIndex < 0 Then

・If Len(TextBox1.Text) = 0 Then

【66309】Re:エラーメッセージ
発言  めぐたん  - 10/8/20(金) 9:52 -

引用なし
パスワード
   ▼kanabun さん:

ご回答ありがとうございます。

色々勉強して、このように変更してみたのですが、
1.の部分は、メッセージも出て、comboxで止まってくれるのですが、
2.、3.、4.はメッセージは出るが、testboxで止まらずに、先に進んでしまいます。
どう修正したらいいのでしょうか?

  If (ComboBox1.Value = "") Then
  intRet = MsgBox("区分を選択してください。", vbOKOnly + vbCritical, "区分選択")
  ComboBox1.SetFocus←1.
  ElseIf (ComboBox1.Value = "その他") And (TextBox2.Value = "") Then
  intRet = MsgBox("ユーザー名を入力してください。", vbOKOnly + vbCritical, "ユーザー名入力")
  TextBox2.SetFocus←2.
  ElseIf ComboBox1.Value <> "その他" And (TextBox1.Value = "" Or TextBox2.Value = "") Then
  intRet = MsgBox("ユーザー名を入力してください。", vbOKOnly + vbCritical, "ユーザー名入力")
   If ComboBox1.Value = "JA" Then
   TextBox2.SetFocus←3.
   Else
   TextBox1.SetFocus←4.
   End If
  End If

【66310】Re:エラーメッセージ
発言  kanabun  - 10/8/20(金) 10:30 -

引用なし
パスワード
   ▼めぐたん さん:

>1.の部分は、メッセージも出て、comboxで止まってくれるのですが、

>2.、3.、4.はメッセージは出るが、testboxで止まらずに、先に進んでしまいます。
>どう修正したらいいのでしょうか?

よくある質問ですね〜

「TextBoxにFocusが戻らない」

検索してみたらどうでしょう?

【66311】Re:エラーメッセージ
発言  kanabun  - 10/8/20(金) 10:49 -

引用なし
パスワード
   ▼めぐたん さん:

>よくある質問ですね〜
>
>「TextBoxにFocusが戻らない」
>
>検索してみたらどうでしょう?

ごめんなさい。それほど深刻な問題でもなかったかもしれません。

たとえば、新規UserFormに
   ComboBox1
   TextBox1
   TextBox2
   CommandButton1
を置いて、
以下のコードを実行したときは、どうなりますか?


'------------------------------------------------- Test用UserForm
Private Sub UserForm_Initialize()
  ComboBox1.List = Split("MB BK 2B 信金 信組 JA 労金 その他")
End Sub

Private Sub CommandButton1_Click()
 Dim x As Long
  Select Case ComboBox1.Value
   Case "MB": x = 1
   Case "BK": x = 2
   Case "2B": x = 3
   Case "信金": x = 4
   Case "信組": x = 5
   Case "JA": x = 6
   Case "労金": x = 7
   Case "その他": x = 8
  End Select

 If ComboBox1.ListIndex < 0 Then
   MsgBox ("区分を選択してください")
   ComboBox1.SetFocus
   Exit Sub

 ElseIf Len(TextBox1.Text) = 0 Then
   MsgBox ("ユーザー名を入力してください。")
   TextBox1.SetFocus
   Exit Sub
 ElseIf Len(TextBox2.Text) = 0 Then
   MsgBox ("ユーザー名を入力してください。")
   TextBox2.SetFocus
   Exit Sub
 End If
 
 MsgBox "入力 OK"
End Sub

【66316】Re:エラーメッセージ
お礼  めぐたん  - 10/8/20(金) 17:15 -

引用なし
パスワード
   ▼kanabun さん:

ご回答ありがとうございました。
kanabunさんのテスト用を試してみたところ、
思ったとおりのことが出来ましたので、
それを参考に、2、3、4の後にExit Subを入れてみたところ、
やりたかったことができるようになりました。

本当にありがとうございました。

  If (ComboBox1.Value = "") Then
  intRet = MsgBox("区分を選択してください。", vbOKOnly + vbCritical, "区分選択")
  ComboBox1.SetFocus←1.
  Exit Sub
  ElseIf (ComboBox1.Value = "その他") And (TextBox2.Value = "") Then
  intRet = MsgBox("ユーザー名を入力してください。", vbOKOnly + vbCritical, "ユーザー名入力")
  TextBox2.SetFocus←2.
  Exit Sub
  ElseIf ComboBox1.Value <> "その他" And (TextBox1.Value = "" Or TextBox2.Value = "") Then
  intRet = MsgBox("ユーザー名を入力してください。", vbOKOnly + vbCritical, "ユーザー名入力")
   If ComboBox1.Value = "JA" Then
   TextBox2.SetFocus←3.
   Exit Sub
   Else
   TextBox1.SetFocus←4.
   Exit Sub
   End If
  End If

2735 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free