web-dev-qa-db-fra.com

Passer des données entre UserForms

Dans Excel VBA, j'ai un formulaire utilisateur semblable au suivant, dans lequel l'utilisateur entre un numéro d'identification, puis les détails sont affichés sur le formulaire utilisateur:

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

Sur le formulaire utilisateur détaillé, j'ai un bouton "Modifier". En cliquant sur le bouton "Modifier", vous ouvrez un autre formulaire utilisateur dans lequel l'utilisateur peut modifier les détails de ce numéro d'identification, mais évidemment pas le numéro d'identification lui-même. Pour ce faire, je dois passer le numéro d’identification du formulaire d’utilisateur détaillé au formulaire de modification d’utilisateur. Y-a-t'il une façon de le faire?

Le bas du formulaire Afficher les détails de l'utilisateur pour ouvrir le formulaire Modifier l'utilisateur est similaire à ce qui suit:

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

J'ai déjà regardé les liens suivants mais ils ne semblent pas aider:

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

5
Ben Smith

Il y a beaucoup de façons ... Voici quelques ...

Voie 1

  1. Déclarer une variable Public dans un module
  2. Affectez cette variable à Userform1, puis lancez Userform2. Cette variable conservera sa valeur. Exemple

Dans Userform1

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

Dans Userform2

Private Sub CommandButton1_Click()
    MsgBox MyVal
End Sub

Dans le module

Public MyVal

Voie 2

Utilisez la propriété .Tag du userform

Dans Userform1

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

Dans Userform2

Private Sub CommandButton1_Click()
    MsgBox Me.Tag
End Sub

Voie 3

Ajoutez une Label dans Userform2 et définissez sa propriété visible sur False

Dans Userform1

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

Dans Userform2

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

Le moyen le plus simple est:

UserForm2.TxtIDNo.Text = UserForm1.txtIDNo.Text

1
DragonSamu

Il y a plusieurs façons de résoudre ce problème. Celui que j'utilise est de déclarer une variable globale ou publique dans le module.

Exemple:

Public commonVariable As String

ensuite, dans userform, vous pouvez affecter ou récupérer une valeur à partir de cette variable. Par exemple, dans userform1:

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

dans UserForm2:

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