プロが教える店舗&オフィスのセキュリティ対策術

ExcelのVBAについてです。
ネットのサイトなどを参考に勉強しはじめたばかりなので、非常に初歩的な質問かと思いますが、よろしくお願いいたします。
ユーザーフォームにコンボボックスとテキストボックスを用意しました。
それぞれコンボボックスは「combobox1」、テキストボックスは「textbox1」とします。
コンボボックスからプルダウンで項目が選択できるよう

Private Sub UserForm_Initialize()

With combobox1
.AddItem "りんご"
.AddItem "ぶどう"
.AddItem "みかん"
.AddItem "もも"
End With

End Sub

としました。

各項目が選択されたときに、テキストボックス「textbox1」にはそれぞれの固定値が入るようにしたいです。
(例えばりんごなら1、ぶどうなら3、みかんなら10、ももなら25といったような感じで)

Private Sub combobox1_Click()

Dim listno As Long
listno = combobox1.ListIndex

With textbox1

Select Case para
Case 0
.Text = 1
Case 1
.Text = 3
Case 2
.Text = 10
Case 3
.Text = 25

End Select
End With

End Sub

としました。

しかし、実行してみると、最初選択したときはtextbox1には数値が入るのですが、その後違う項目を選択してもtextbox1の値は変わりません。
どのようにしたらよいのでしょうか?


また、根本的なことなのですが、なぜ
.Additem "りんご"
ではメソッド(.Additemってメソッドですよね?)ではメソッドと値を並べて記述するのに、
case 0
.text = 1
では =で結ぶのでしょうか?(.textもメソッドですよね?)

A 回答 (3件)

確かに_clickより_changeですね。


でも動きます?
私としてはparaの方が気になるんですが・・・。
これをlistnoにしたら、思い通りに動きませんか?
    • good
    • 0
この回答へのお礼

すごく初歩的なところを間違えていました。
おっしゃるとおりです。
イベントもchangeが適切ですね。
ありがとうございました。

お礼日時:2012/07/18 17:33

>>ANo.1 補足



メソッドは関数そのものなので、引数(argment)を渡し、処理後、戻り値(return)を返します。戻り値を受け取らない時はカッコで囲まないので、分かりづらいです。
 ret = object.method(arg1, arg2)
 object.method arg1, arg2

パラメータは「値」の受け渡し。変数みたいなものでう。
 val = object.param
 object.param = val

Cellsのように引数を受け取るパラメータもあります。
 val = object.param(arg1, arg2)
 object.param(arg1, arg2) = val
「パラメータ」は変数的に立ち回りますが、実は、処理=メソッド的なモノが噛んでます。そのため、引数を受け取ったり、Cells・Rangeのように同じモノを参照する方法が複数あったりもします。
配列を高度にしたよーなものをイメージすると分かりやすい?
    • good
    • 0
この回答へのお礼

丁寧に説明していただきありがとうございます。
#3の回答で問題は解決しました。

勉強になります。
ありがとうございました。

お礼日時:2012/07/18 17:34

たしか、Clickはカーソル合わせた時のイベント、変更時はChangeじゃないかな。



.textはメソッド(関数)ではなく、プロパティ(変数)ですよ。
プロパティは、ローカルウィンドウで値を見れます。ブレイクポイント・ステップ実行・オブジェクトブラウザなど、VBEには便利な機能が多いので、使ってみてください。
    • good
    • 0

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