真的很难与这个挣扎,暂时找到了一个解决方案,但这并不是一个令人满意的解决方案。 我有一个包含两个用户表单的工作簿,一个用于输入数据,一个用于搜索先前输入的数据,另一个用户表单设计为日期选择器表单,设置为在输入指定日期文本框时激活。
单独我没有问题,用户点击文本框并显示日期选择器表单,他们进行选择以关闭日期选择器表单并将日期添加到文本框。在“输入数据”表单上,我有一个多页面,在两个页面的每一页上都有一个日期选择文本框,在“查找数据”表单上我可以选择搜索单个日期或范围,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
答案 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