Pass data between UserForms

大城市里の小女人 提交于 2019-12-18 11:42:46

问题


Within Excel VBA I have a User Form similar to the following where the user enters an ID number and then the details are displayed on the user form:

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

On the Details User Form, I have an "Edit" button. Clicking the "Edit" button would open another user form where the user can change the details of that ID number, but obviously not the ID number itself. To do this, I need to pass the ID number from the Details User Form to the Edit User Form. Is there a way of doing this?

The bottom on the Show Details User Form to open the Edit User Form is similar to the following:

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

I have already looked at the following links but they don't seem to help:

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


回答1:


There are many many ways... Here are some...

Way 1

  1. Declare a Public Variable in a Module
  2. Assign to that variable in Userform1 and then launch Userform2. This variable will retain it's value. Example

In Userform1

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

In Userform2

Private Sub CommandButton1_Click()
    MsgBox MyVal
End Sub

In Module

Public MyVal

Way 2

Use the .Tag property of the userform

In Userform1

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

In Userform2

Private Sub CommandButton1_Click()
    MsgBox Me.Tag
End Sub

Way 3

Add a Label in Userform2 and set it's visible property to False

In Userform1

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

In Userform2

Private Sub CommandButton1_Click()
    MsgBox Label1.Caption
End Sub



回答2:


There are serveral ways to solve this problem. The one that I use is declare global or public variable in module

Example:

Public commonVariable As String

then in userform you can assign or retrieve value from this variable. For example in userform1:

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

in UserForm2:

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



回答3:


The most simplest way is:

UserForm2.TxtIDNo.Text = UserForm1.txtIDNo.Text



来源:https://stackoverflow.com/questions/32520558/pass-data-between-userforms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!