为userform close上的其他userform控件设置值

时间:2016-08-24 13:55:31

标签: excel-vba excel-2010 userform vba excel

真的很难与这个挣扎,暂时找到了一个解决方案,但这并不是一个令人满意的解决方案。 我有一个包含两个用户表单的工作簿,一个用于输入数据,一个用于搜索先前输入的数据,另一个用户表单设计为日期选择器表单,设置为在输入指定日期文本框时激活。

单独我没有问题,用户点击文本框并显示日期选择器表单,他们进行选择以关闭日期选择器表单并将日期添加到文本框。在“输入数据”表单上,我有一个多页面,在两个页面的每一页上都有一个日期选择文本框,在“查找数据”表单上我可以选择搜索单个日期或范围,3个日期选择文本总共有一箱。

现在我注意到userform1(输入数据)正在提示运行时错误91 - 对象变量或未设置块变量,并且每当我从日期选择器表单中选择日期时,都会在代码中标记userform2的第一行

我注意到的是,正确的日期仍然输入到文本框中,因此作为修复我在突出显示的行上方添加了“On error goto”行,允许操作不间断地进行。我注意到的是,现在如果我在userform2上的任何地方输入日期(查找数据),然后关闭表单并决定我想要输入数据,userform1上的文本框将包含userform2上之前的选择。对我来说尤其令人困惑的是,UF1的initialize事件在日期文本框中输入当前日期。

看下面的代码,有更好的方法来写这个吗?我希望我解释得很好,如果我能提供其他详细信息,请告诉我。

Sub CloseDatePicker(save As Boolean)

  If UserForm1.MultiPage1.Value = 0 Then
  UserForm1.tbDate.Text = Calendar1.Value
  UserForm1.cbMember.SetFocus
  ElseIf UserForm1.MultiPage1.Value = 1 Then
  UserForm1.tbDate2.Text = Calendar1.Value
  UserForm1.cbMember2.SetFocus
 End If

 On Error GoTo dpexit

If UserForm2.ActiveControl.Name = "TextBox1" Then
UserForm2.TextBox1.Text = Calendar1.Value
End If
 If UserForm2.ActiveControl.Name = "TextBox2" Then
 UserForm2.TextBox2.Text = Calendar1.Value
 ElseIf UserForm2.ActiveControl.Name = "TextBox3" Then
 UserForm2.TextBox3.Text = Calendar1.Value
 End If

dpexit:
    Me.Hide
End Sub

1 个答案:

答案 0 :(得分:0)

在门外,我看到您的代码遇到的第一个问题是您正在尝试使用.Text属性更改文本框的值。我个人从来没有幸运使用.Text来设置值,因为它肯定会抛出Err:91。相反,我发现使用.Value更好。

Sub CloseDatePicker(save As Boolean)

    If UserForm1.MultiPage1.Value = 0 Then
        UserForm1.tbDate.Value = Calendar1.Value
        UserForm1.cbMember.SetFocus
        ElseIf UserForm1.MultiPage1.Value = 1 Then
        UserForm1.tbDate2.Value = Calendar1.Value
        UserForm1.cbMember2.SetFocus
    End If

' On Error GoTo dpexit 'disabled this for you to test your code

    If UserForm2.ActiveControl.Name = "TextBox1" Then
        UserForm2.TextBox1.Value = Calendar1.Value
    End If
    If UserForm2.ActiveControl.Name = "TextBox2" Then
        UserForm2.TextBox2.Value = Calendar1.Value
    ElseIf UserForm2.ActiveControl.Name = "TextBox3" Then
        UserForm2.TextBox3.Value = Calendar1.Value
    End If

dpexit:
    Me.Hide
End Sub