将触发事件的值返回到Excel VB Macro

时间:2018-06-02 19:35:11

标签: excel vba excel-vba

我有2个用户表单,Userform_1包含许多TextBoxes(TextBox1,TextBox2,TextBox3,.....)&在Userform_2中我有1个TextBox,用户可以在其中输入值。现在,我需要在Userform_1中传递用户输入的值,以便在Userform_1中显示/存储在其各自的触发TextBox事件中。因此,当用户想要传入TextBox3(Userform_1)时,他/她将只使用double_click触发器(激活Userform_2)&传递值应仅存储在TextBox3中。

我试过了:

在Userform_1

Private Sub TextBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   On Error Resume Next
   UserForm2.Show
End Sub

在Userform_2

Private Sub CommandButton1_Click()
    On Error Resume Next
    If UserForm1.TextBox1.Value = "" Then UserForm1.TextBox1.Value = ComboBox1.Value
    If UserForm1.TextBox2.Value = "" Then UserForm1.TextBox2.Value = ComboBox1.Value
    If UserForm1.TextBox3.Value = "" Then UserForm1.TextBox3.Value = ComboBox1.Value
Unload Me
End Sub

问题是它会在任何TextBox中显示输入的值,这是空的&不是特别在TextBox3中。任何见解都会有所帮助。

2 个答案:

答案 0 :(得分:0)

您的代码完全按照您要求它执行的操作(而不是您希望它执行的操作)。根据您的描述,我提供以下内容(未经测试)。

在Userform_1

Private Sub TextBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   UserForm2.Show
   TextBox3.Value = UserForm2.ComboBox1.Value
End Sub

在Userform_2

Private Sub CommandButton1_Click()
    Me.Hide  
    'Note not unloading, this means that the userform is still in memory and you can access the values after it is hidden.
    ' Also, hiding the form will return control back to the UserForm1 for further processing.
End Sub

并且避免使用On Error,尤其是On Error Resume Next,您所做的只是隐藏错误,而不是处理错误。如果您可以预期您的代码会导致错误,请在该代码之前处理它。

答案 1 :(得分:0)

谢谢ADJ ...... 您的概念很好,但它并不能完全满足要求,只是隐藏Userform不会删除/清除下次输入的输入值&再次重新打开它会显示最后输入的值。我可以写一个代码来删除它,但后来我有太多的文本框。 我使用了你的概念,只从特定的TextBox中调用所需的Userform ......

写下面的代码,符合我的要求:

UserForm_1: 在UserForm_2中为标识符

创建了隐藏的TextBox1
UserForm2.TextBox1.Value = "<random identifier value>"

UserForm_2:

If TextBox1.Value = "<random identifier value>" Then
    UserForm1.TextBox3.Value = "<User Input>"
End If

所以这样我就可以分配&amp;仅调用已识别的TextBox。