• ベストアンサー

Excel 2003 VBA ComboBox

質問させていただきます。 現在 UserForm 内に ComboBox が三つ有ります。コマンドボタンは一つです。 早速ですが、三つの ComboBox に値が入力された場合のみ、コマンドボタンを Active にする方法は有りますでしょうか? いろいろ考えたり、試したりもしましたが、ComboBox は完全に独立しているので現実的に無理なのでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.2

>ComboBox1に値が入力された場合にとあるマクロを実行する様に記述したいのですが、方法は有りますか? >誤解しない用に補足しますが、ComboBox1にはチヌ・太刀魚などと魚名が有るのですが、 >ComboBox1の値がチヌならばと言う条件分岐では無く、取り敢えずComboBox1に値が有れば。 >と言う記述をしたいです。 Private Sub ComboBox1_Change() 'Combobox1を変更した場合 If  ComboBox1 <> "" And ComboBox2 <> "" And ComboBox3 <> "" Then CommandButton1.Enabled = True 'コマンドボタンを押せるようにする End If End Sub 上記プログラムは、コンボボックス1の値が変わった場合に実行されるものです。 その中で、 Combobox1<>"" というのは、Combobox1が空じゃないとき、という意味になります。 <>は否定で、""は空白をあらわします。 なので、おっしゃるように Combobox1が空じゃない場合に実行させたいのなら、 Private Sub ComboBox1_Change() 'Combobox1を変更した場合  If Combobox1<>"" then'Combobox1が空じゃない場合   Call Module1.sheet_sort ’Call 標準モジュール名.マクロ名で、マクロ呼び出し   End if     If  ComboBox1 <> "" And ComboBox2 <> "" And ComboBox3 <> "" Then   CommandButton1.Enabled = True 'コマンドボタンを押せるようにする  End If End Sub もっとスマートな書き方があるかもしれませんが、 このよな感じでもいいでしょうかね? ただ、この場合面倒なのが、 変わった瞬間に何度もマクロを実行します。 コンボボックスで選択しようとしているときも実行したような? Comboboxのリストにある値で、選択した場合や、 変更を確定?した場合なら、 Private Sub Combobox1_AfterUpdate() End sub を使ったほうがいいと思います。 違いは、ためしにプログラムを組んでみれば分かるかと思います。 分かりやすい確認方法は、 Msgbox を使って、メッセージが出るかで確認する方法もいいかと思います。 Private Sub Combobox1_AfterUpdate()  msgbox "値が変わったよ! After Update" End sub Private Sub Combobox1__Change()  msgbox "値が変わったよ! Change" End sub 色々試してみてください^^ 以上、参考まで

noname#193651
質問者

お礼

回答有り難うございます。 また詳細にわたり教えて頂き助かりました。

その他の回答 (1)

回答No.1

Combobox1 Combobox2 Combobox3 Commandbutton1 があるとします。 Option Explicit Private Sub ComboBox1_Change() 'Combobox1を変更した場合 If ComboBox1 <> "" And ComboBox2 <> "" And ComboBox3 <> "" Then CommandButton1.Enabled = True 'コマンドボタンを押せるようにする End If End Sub Private Sub ComboBox2_Change() 'Combobox2を変更した場合 If ComboBox1 <> "" And ComboBox2 <> "" And ComboBox3 <> "" Then CommandButton1.Enabled = True End If End Sub Private Sub ComboBox3_Change() 'Combobox3を変更した場合 If ComboBox1 <> "" And ComboBox2 <> "" And ComboBox3 <> "" Then CommandButton1.Enabled = True End If End Sub Private Sub UserForm_Initialize() CommandButton1.Enabled = False 'CommandButton1を押せなくします。 End Sub こうですかね~

noname#193651
質問者

お礼

迅速な回答有難うございます。助かりました。 申し訳ありませんが、もう一つ質問させて下さい。 ComboBox1に値が入力された場合にとあるマクロを実行する様に記述したいのですが、方法は有りますか? 誤解しない用に補足しますが、ComboBox1にはチヌ・太刀魚などと魚名が有るのですが、ComboBox1の値がチヌならばと言う条件分岐では無く、取り敢えずComboBox1に値が有れば。と言う記述をしたいです。 説明不足な点も有ると思いますがよろしくお願いします。

noname#193651
質問者

補足

迅速な回答有難うございます。助かりました。 申し訳ありませんが、もう一つ質問させて下さい。 ComboBox1に値が入力された場合にとあるマクロを実行する様に記述したいのですが、方法は有りますか? 誤解しない用に補足しますが、ComboBox1にはチヌ・太刀魚などと魚名が有るのですが、ComboBox1の値がチヌならばと言う条件分岐では無く、取り敢えずComboBox1に値が有れば。と言う記述をしたいです。 説明不足な点も有ると思いますがよろしくお願いします。

関連するQ&A