• ベストアンサー

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

  • VBAのComboBoxについて

    UserForm1にComboBoxが8個(ComboBox1~8)あります。 各ComboBoxはSheet1の下記列に入力されているリストを表示します。 ComboBox1 : A列 ComboBox2 : B列 ComboBox3 : C列 ComboBox4 : D列 ComboBox5 : E列 ComboBox6 : F列 ComboBox7 : G列 ComboBox8 : H列 ComboBox9 : I列 ComboBox10 : J列 そこで、UserForm1の各ComboBoxでデータ選択する際に、リストにある場合はそれを選択し、リストにない場合はComboBoxに新しいデータを入力し、UserForm1のCommandButton1を押下時にその新しいデータをSheet1の各列に追加したいのですが、どのようにしたらよいのでしょうか。 Sheet1にあるリストをComboBoxに表示するところまではできています。 ※ComboBoxの番号とリストの列番号を一致させています。 --------------------------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, retu As Integer, i As Integer For retu = 1 To 10 lastrw = Sheet1.Cells(1, retu).End(xlDown).Row For i = 1 To lastrw - 1 Controls("ComboBox" & retu).AddItem Sheet1.Cells(i + 1, retu).Value Next i Next retu End Sub ---------------------------------------------------------------

  • VBAについて

    UserForm1に、TextBox2、TextBox3、ComboBox1があります。 例えば、それぞれに TextBox2 = 100 TextBox3 = 500 ComboBox1 = abc-def と値をフォームから入力し、 UserForm1に配置された「OK」ボタンをクリックすると、 エクセルシートのH10からM10の結合された一つのセルの中に 100 / 500 abc-def と2段表示させたいのですが、可能でしょうか。 可能でしたら方法を教えて下さい。

  • Excel VBAについて

    UserForm上に配置しているComboBox1はSheet3からデータを読み込んで表示するようにしているのですが、現在はComboBox1に直接手入力でもいれることができてしまいます。 これをできなくするのはどうしたらよいのでしょうか。

  • Excel VBA ComboBox

    質問させて頂きます。 現在ユーザーフォーム内にComboBoxを配置しリストに、チヌ/チヌマン(魚名)を入れています。 問題は手入力でも指定出来る用にしたいのですが、「チヌ」と入力しEnterをしますと「チヌマン」と出てしまいます。 この2つの魚名は全く異なりますので入力した文字列で済む方法は無いでしょうか? よろしくお願いします。

  • EXCEL VBA コンボボックスでのLISTINDEXの値

    初めて質問させていただきます。 EXCEL VBAでコンボボックスを設定したときのLISTINDEXの値についてですが、 コンボボックスがフォーム内に3つ(ComboBox1,2,3)あり、次のようなコードの入力を行い、 ComboBox1 Sub Userform_Intialize()  With CcomboBox1   AddItem"AAA" '・・・ここの値は0ですね   AddItem"BBB" '・・・ここの値は1ですね  End With End Sub sub ComboBox1_Change()  Me.combobox2.Clear  Select Case Me.ComboBox1.ListIndex   Case 0   Me.ComboBox2.AddItem "2AAA" '・・・ここの値は0ですね    Me.ComboBox2.AddItem "2BBB" '・・・ここの値は1ですね   Case 1   Me.ComboBox2.AddItem "2CCC" '・・・ここの値は何になりますか?   Me.ComboBox2.AddItem "2DDD" '・・・ここの値は何になりますか?  End Select End Sub このcombobox2の4つの項目から、 更にcombobox3の選択項目に分岐するように設定したいのです。 わかりやすいように、ComboBox3もComboBox2のように作成したいのですが、 このように入力した場合、ComboBox2で"2CCC"を選択した場合、 ListIndexの値が2ではないようなのです。 この"2CCC"と"2DDD"のListIndex値はいくつになるのでしょうか? どなたか教えて下さい。

  • VBA 引数にcombobox,Range

    おはようございます。 質問内容が明確?で無い点が多いかもしれませんが、 質問させていただきます。 まず、Excel2003を使い、フォーム上にはコンボボックスを置いています。 プロシージャ?の中の引数?として コンボボックスの名前を使いたいと思っています。 Private Sub UserForm_Initialize()  Call TEST(Combobox1,"A1") End sub Sub TEST(Byval ComboboxName,Byval TEST_Range)  ComboboxName.AddItem "A"  TEST_Range="テスト" End Sub 適当に作成してみましたが… TESTを実行したら、 引数にあるコンボボックスに”A"という値を追加し、 TEST_Rangeに"テスト"と入力したいです。 引数として宣言する際、Stringは違うと思うのですが、 どうやって宣言?すれば良いのでしょうか。 上記例では、TESTを実行したら Combobox1に"A"という値が追加され、 A1に"テスト"と入力されるようになっています(それを目的とします) 分からない点がありましたら、どんどん聞いてください。 よろしくお願いします!

  • ComboBoxについて

    ComboBoxのセレクトした部分を変える方法はないでしょうか? dataに[0,1,2,3,4]、labelsに[1,2,3,4,5]としたComboBoxを用意し、それを選択するとdataを変数に記憶させておき、別ボタンで隣のフレームに移動させます。 再度このComboBoxのあるフレームに移動した場合、読込時に先ほど選択した位置に変える方法が見つからず困っています。 this.selected = dataの入った変数 などいろいろ試してみましたが無理でした。 FlashMX Professional2004 7.0.1 を使用しています。

    • ベストアンサー
    • Flash
  • Excel VBA(Win2000、Office2000)

    現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 問題の日付に関する質問についてですが・・・ ユーザーフォーム上に 年を入力するComboBox1 → 2004 月を入力するComboBox2 → 5 日を入力するComboBox3 → 7 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、2004/05/07と認識させて、TextBox1に"金"と表示させたいのですが、どのようにしたら良いでしょうか? TextBox1表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。

  • VBAのエラーについて

    エクセル2007 でマクロのコードを書いています。 開発画面からマクロを実行するとうまくいくのに、エクセルのシートに配置したボタンにそのマクロを登録して実行するとエラーが出てしまいます。 標準モジュールに UserForm1.showを書いており、UserForm1上に配置したコマンドボタンによってUserForm2を表示させているのですが、UserForm2が出る前に、「問題が発生したために、Microsoft Office 2007 Excelを・・・・・・」というような画面が出て強制終了されます。(UserForm1、UserForm2とも modelessで表示しています。) また、開発画面から1度実行すれば、シートに配置しマクロを登録したボタンからでも実行できるようになるのですが、一度、そのブックを保存してから改めて開くと、同じような症状が出てしまいます。 UserForm2のInitializeに問題があるのだと思い、そこのコードをじっくりと見た結果、UserForm2にあるPageの中に配置した特定のComboBoxとCommandButtonに関する処理を非表示にするとエラーが出ないことが判明しました。しかし、それらについての処理は、他のComboBoxなどと同じ処理(セルの値を読み込むような)をしているもので、名前などのミスもありません。(というか、開発画面からの実行では正常に動きます。) ただ、共通していることとしては、そのエラーが出る特定のComboBoxとCommandButtonは、最後の最後で思いついて配置したものであるということだけなのです。  ずっと、いろいろな方向から試しているのですが、わかりません。複雑な説明で申し訳ないのですが、なにかしら情報をお願いします。

  • Excel 2003 VBA マウスホイール

    質問させて頂きます。 現在 UserForm に ComboBox を幾つか用意し各 ComboBox に結構な数のデータを入れて いるのですが、毎回マウスでスクロールバーを掴み移動するのはさすがに面倒くさいです。 早速ですがマウスホイールで ComboBox をスクロールさせる方法を教えて頂きたいです。 ネットで調べて見ると色々出てきましたが詳細などは書かれていないため正直理解出来ません。 お手数かけますが詳細も含め教えて頂きたいです。 宜しくお願いします。

このQ&Aのポイント
  • Bluetooth薄型コンパクトキーボードを使用している際に、勝手に文字が入力される問題が発生しています。
  • 特に数字の『1』が連続で入力される現象が続いており、パソコンの電源やBluetoothの再接続、電池の交換を試しましたが解決しませんでした。
  • エレコム株式会社の製品であるTK-FBP101シリーズを使用しており、問題は今朝から発生しています。
回答を見る