こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ワークシートのコンボボックスのExcelVBA

ワークシートのコンボボックス(Active X コントロール)で選択されたデータがあるかどうか
チェックしたいのです。セルならば、うまくいくのですが、コンボボックスの場合はうまくいきません。
クライアント名と品名は、コンボボックスから選択するようにしています。(下記のスクリプトは、わから
ないのでセル番地を任意に入れています。)
金額は、セル入力ですのでうまくチェックできています。
どうしたらいいのでしょうか?ご指導お願いいたします。


Private Sub cmd_登録_Click()
Dim chkStr As String '入力チェックのメッセージ文

'---------入力データのチェック-------------
'初期値を代入する。
chkStr = ""

'クライアント名が未入力の場合
If IsEmpty(ActiveSheet.cboクライアント.ListIndex) Then
chkStr = "クライアント名を選択してください"
Range("B5").Select

  '品名が未入力の場合
ElseIf IsEmpty(Range("E5")) Then
chkStr = "品名を選択してください"
Range("E5").Select

  '売上金額が未入力の場合
   ElseIf IsEmpty(Range("W14")) Then
chkStr = "売上金額を入力してください。"
Range("W14").Select

Else
MsgBox "登録を行います"


End If


'入力漏れがある場合は、プロシージャを抜ける
If chkStr <> "" Then
MsgBox chkStr, vbCritical, "登録エラーです。"
Exit Sub
End If

投稿日時 - 2011-03-10 12:22:07

QNo.6583618

すぐに回答ほしいです

質問者が選んだベストアンサー

>セルならば、うまくいくのですが
何のことかな?あるいは下記のことか。
エクセル(VBA)でのコンボはLinkedCellをプロパティで設定するのが、本則(使うことを期待されている)。
この場合はそのセルの値が空白かどうかで判団するほかない。1セルと対応しているので、消さない限り保持されるので、選択していない状態(空白)に戻すのもコードの記述が要る。
仕組み的に難しい。
受胎を取るタイミングを決めるコマンドボタンなどが、別途要るのかなと思う。
参考
Sub test01()
MsgBox Range(Worksheets("Sheet1").ComboBox1.LinkedCell).Value
End Sub
で選択されている値が取れる。

投稿日時 - 2011-03-12 21:56:41

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

mimimam77さん こんにちは。

「ListIndex」は選択されたインデックス番号なので必ず数値です。
よってEmpty値はありません。
選択されていなければ「-1」になります。

以下のように変更すれば良いかと思います。
If IsEmpty(ActiveSheet.cboクライアント.ListIndex) Then
        ↓
If ActiveSheet.cboクライアント.ListIndex < 0 Then

投稿日時 - 2011-03-10 14:33:03

お礼

ありがとうございます!!jcctairaさん。

できました!!わかりやすい文章なので、理解できました!!

投稿日時 - 2011-03-10 15:23:20

あなたにオススメの質問