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

解決済みの質問

ExcelVBA初歩的な質問

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もメソッドですよね?)

投稿日時 - 2012-07-15 11:58:43

QNo.7591436

困ってます

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

確かに_clickより_changeですね。
でも動きます?
私としてはparaの方が気になるんですが・・・。
これをlistnoにしたら、思い通りに動きませんか?

投稿日時 - 2012-07-18 13:00:20

お礼

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

投稿日時 - 2012-07-18 17:33:41

ANo.3

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

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

回答(3)

ANo.2

>>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のように同じモノを参照する方法が複数あったりもします。
配列を高度にしたよーなものをイメージすると分かりやすい?

投稿日時 - 2012-07-15 14:58:05

お礼

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

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

投稿日時 - 2012-07-18 17:34:57

ANo.1

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

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

投稿日時 - 2012-07-15 14:08:36

あなたにオススメの質問