web-dev-qa-db-ja.com

ユーザーフォーム間でデータを渡す

Excel VBAには、次のようなユーザーフォームがあり、ユーザーがID番号を入力すると、詳細がユーザーフォームに表示されます。

Private Sub btnIDNo_Click()
Dim IDNo As Long
If txtIDNo.Text <> "" Then
    If IsNumeric(txtIDNo.Text) = True Then
        lblError.Caption = ""
        IDNo = txtIDNo.Text
        Worksheets("Details").Activate
        Range("B4").Select
        While ActiveCell.Value <> "" And ActiveCell.Value <> IDNo
            ActiveCell.Offset(1, 0).Select
        Wend
        If ActiveCell.Value = IDNo Then
            txtName.Value = ActiveCell.Offset(0, 1).Value
            txtPhone.Value = ActiveCell.Offset(0, 2).Value
        Else
            lblError.Caption = "Cannot find ID nummber"
        End If
    Else
        lblError.Caption = "Please enter the ID Number in numeric form"
    End If
End If
End Sub

詳細ユーザーフォームに[編集]ボタンがあります。 [編集]ボタンをクリックすると別のユーザーフォームが開き、ユーザーはそのID番号の詳細を変更できますが、ID番号自体は変更できません。これを行うには、詳細ユーザーフォームからユーザー編集フォームにID番号を渡す必要があります。これを行う方法はありますか?

「ユーザーの編集」フォームを開くための「詳細ユーザーの表示」フォームの下部は、次のようになります。

Private Sub CommandButton1_Click()
Dim IDNo As Long
If txtIDNo.Text <> "" Then
    If IsNumeric(txtIDNo.Text) = True Then
        lblError.Caption = ""
        IDNo= txtIDNo.Text
        ufmEditDetails.Show
        ufmShowDetails.Hide
    Else
        lblError.Caption = "Please enter the ID Number in numeric form"
    End If
Range("B4").Select
End If
End Sub

私はすでに以下のリンクを見ましたが、それらは役に立たないようです:

http://www.mrexcel.com/forum/Excel-questions/671964-visual-basic-applications-pass-variables-between-user-forms.html

http://gregmaxey.mvps.org/Word_tip_pages/userform_pass_data.html

http://peltiertech.com/Excel/PropertyProcedures.html

6
Ben Smith

多くの方法があります...ここにいくつかあります...

方法1

  1. モジュールでPublic変数を宣言する
  2. Userform1でその変数に割り当ててから、Userform2を起動します。この変数はその値を保持します。例

Userform1内

Private Sub CommandButton1_Click()
    MyVal = "Sid"
    UserForm2.Show
End Sub

Userform2

Private Sub CommandButton1_Click()
    MsgBox MyVal
End Sub

モジュール内

Public MyVal

方法2

使用 .Tagユーザーフォームのプロパティ

Userform1内

Private Sub CommandButton1_Click()
    UserForm2.Tag = "Sid"
    UserForm2.Show
End Sub

Userform2

Private Sub CommandButton1_Click()
    MsgBox Me.Tag
End Sub

方法

Userform2にLabelを追加し、その可視プロパティをFalseに設定します

Userform1内

Private Sub CommandButton1_Click()
    UserForm2.Label1.Caption = "Sid"
    UserForm2.Show
End Sub

Userform2

Private Sub CommandButton1_Click()
    MsgBox Label1.Caption
End Sub
19
Siddharth Rout

この問題を解決する方法はいくつかあります。私が使用するものは、モジュールでグローバル変数またはパブリック変数を宣言することです

例:

Public commonVariable As String

次に、ユーザーフォームで、この変数に値を割り当てたり、値を取得したりできます。たとえば、userform1の場合:

Private Sub btnIDNo_Click()
    commonVariable = "UserId"
End Sub

userForm2の場合:

Private Sub CommandButton1_Click()
    me.txtIDNo.Text = commonVariable 
End Sub

最も簡単な方法は次のとおりです。

UserForm2.TxtIDNo.Text = UserForm1.txtIDNo.Text

1
DragonSamu