2016-08-24 101 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