2

基本的なコンボボックスとコマンド ボタンを備えたユーザー フォームがあります。ユーザーがコマンド ボタンを押すと、UserForm を閉じ、コンボボックスの値を変数に保存して、"ThisWorkbook" に含まれるサブルーチンからアクセスできるようにします。

ユーザー フォーム コードで:

Public employee_position As String    
Public Sub CommandButton1_Click()

    employee_position = Me.ComboBox1.Value
    Unload Me

End Sub

「ThisWorkbook」コード内

Private Sub GetUserFormValue()
    Call Userform_Initialize
    EmployeePosition.Show
    MsgBox employee_position
End Sub

「GetUserFormValue()」を実行するとUserFormが出てきて、コンボボックスで値を選択してコマンドボタンを押すことができるのですが、MsgBoxが立ち上がると「」(Nothing)と表示されます

ここで何が間違っていますか?

4

2 に答える 2

3

するとUnload Me、モジュールに関連するすべての情報 (グローバル変数を含む) が失われると思います。ただし、Me.Unload ではなく Me.Hide を使用すると、ルーチンが戻った後にフォームの値にアクセスできます。だからこれを試してください:

-- ユーザーフォーム コードには以下が含まれます。

Public Sub CommandButton1_Click()
    Me.Hide
End Sub

-- メイン モジュールには以下が含まれます。

Private Sub GetUserFormValue()
    Call Userform_Initialize
    EmployeePosition.Show
    MsgBox EmployeePosition.ComboBox1.Value
    Unload EmployeePosition
End Sub

私はそれがうまくいくと思います。

于 2013-01-26T05:10:08.463 に答える
2

私は同じ問題を抱えていましたが、これが私が解決した方法です:

メイン コードがワークシートにあり、変数がそのワークシートで public として宣言されている場合 (たとえば、Microsoft Excel オブジェクト -> Sheet1 (Sheet1))、"Unload Me" の結果をユーザー フォームからワークシート コードに渡すことはできません。 .

私の問題を解決するために、新しいモジュールを挿入し、そこでパブリック変数を宣言しました。コードをワークシートからモジュールに移動する必要さえありませんでした...パブリック変数の宣言だけです。

これがあなたにとってもうまくいくことを願っています!

アンドリュー

于 2014-05-02T13:45:01.740 に答える