2016-08-24 61 views
0

真的很困扰这个,找到了一个解决方案,但它不是一个真正令人满意的解决方案。 我有一个工作簿,有两个用户窗体,一个用于输入数据,一个用于搜索以前输入的数据,第三个用户窗体设计为日期选择器窗体,设置为在输入指定日期文本框时激活。用户窗体上的其他用户窗体控件的设置值关闭

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

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

什么我也注意到然而是正确的日期仍然被输入到文本框,以便我加了高亮线,是允许的动作发生不中断上述的“对错误转到”线修复。我注意到的是,现在如果我在userform2上的任何位置输入日期(查找数据),然后关闭表单并决定要输入数据,userform1上的文本框将包含前一个选择在userform2上的任何内容。尤其令人困惑的是,UF1的初始化事件在日期文本框中输入当前日期。

看到下面的代码,有没有更好的方法来写这个?我希望我解释得很好,请让我知道,如果我可以提供更多的细节来帮助。

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

你隐藏UserForm2或卸载它吗? – Comintern

+0

用户表单1和2都被设置为“卸载我”。但是在用户窗体DatePickerForm关闭时发生问题,而不是userform1或userform2。 – Awill

+0

我不确定如何添加文件作为示例。让我知道它是否真的有助于理解我遇到的情况。 – Awill

回答

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 
+0

此外,如果您尝试在已卸载的用户窗体上编辑这些值,则不会有任何要引用的内容。直到完全使用用户表单完成后,使用'.Hide'会更好。 – Tyeler