プロが教えるわが家の防犯対策術!

ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。

コンボボックスのコードで
Private Sub ComboBox1_Change()
moji1 = ComboBox1.Text
Range("A1").Value = moji1
のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。

マクロ1にて、上記と同じ
Range("A1").Value = moji1
というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。

原因をご存知の方はお教えください。

A 回答 (3件)

原因については下記を参考にしてください。


http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/ …
    • good
    • 4

こんばんは。



プロシージャ内は、プロシージャレベル変数で、その範囲だけですが、変数を他のプロシージャで使用するなら、プロシージャの外に、モジュールレベル変数のMoji1 を置けば十分だとは思うけれども、以下のように、直接、ComboBox1の値をとればよいのでは?なお、モジュールレベル変数も、UserForm モジュールですから、ローカル変数です。


Private Sub CommandButton1_Click()
 If ComboBox1.Text <> "" Then
  Range("A1").Value = ComboBox1.Text
 End If
End Sub
    • good
    • 6

Private Sub ComboBox1_Change()


で、定義された変数(moji1)は、ローカル変数になるので、
Private Sub ComboBox1_Change()の中でしか有効ではありません
マクロ1で、Range("A1").Value = moji1 としても、このmoji1は
名前は同じでも、中身は別になります

moji1 をグローバル変数として定義すれば、ご希望の動作をさせることが出来ます
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …

ただ、ひとつの変数を使いまわすと、マクロが大きくなるに従いミスの原因となる可能性が大きくなりますよ

マクロ1で、改めて
moji1 = ComboBox1.Text
で、読み込むか
"A1"に書き込んだ後なら、"A1"から読み込んだ方が良いと思います
moji1 = Range("A1").Value
    • good
    • 2

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A