2016-04-28 51 views
0

我想弄清楚如何在excel用戶窗體中獲取文本框來更新HTML文本框。例如,如果您的默認值設置爲「名字」,並且您在該文本框中單擊,它將消失並讓您輸入。一旦您點擊,如果您沒有輸入任何內容,它將返回到默認的「名字」。Userform文本框像html文本框一樣工作

我發現了很多關於這種類型的東西的問題,但沒有人爲我工作。這是我的代碼到目前爲止。

Sub QCToolsForm() 
QCTools.Show vbModeless 
End Sub 

Private Sub RUBSTotalExpense_Enter() 
Debug.Print "Enter" 
If Me.RUBSTotalExpense.Value = "Total Expense" Then 
    Me.RUBSTotalExpense.Value = "" 
End If 
End Sub 

Private Sub RUBSTotalExpense_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
Debug.Print "Exit" 
If Me.RUBSTotalExpense.Value = "" Then 
    Me.RUBSTotalExpense.Value = "Total Expense" 
End If 
End Sub 

Private Sub UserForm_Initialize() 
updateDefault 

End Sub 

Public Function updateDefault() 

If Me.RUBSTotalExpense.Value = "" Then 
    Me.RUBSTotalExpense.Value = "Total Expense" 
End If 

End Function 

直到關閉用戶窗體,exit子纔會運行。我也曾嘗試失敗,並且沒有幸運地獲得焦點。我也在更新之前和之後嘗試過,但他們只在第一次工作。如果值爲「總費用」,我希望它每次在框中單擊時都會消失。當我離開文本框時,如何獲得exit sub或類似的內容?

Userform

回答

1

我試着用你的代碼進入和退出,並將其與測試窗體爲我工作。它正確更新字段,並在選擇文本框時打印「Enter」,並在用戶窗體上選擇其他內容時打印「退出」。請注意,對於Exit來觸發,您需要將焦點放在用戶窗體上的其他內容上。只需點擊其他地方不會從文本框中獲得焦點,您必須點擊其他文本框或其他控件。

我建議使用Debug.Print來準確觀察每次嘗試的方法被調用的時間,以便您可以確定代碼的運行時間。

Private Sub TextBox1_Enter() 
    Debug.Print "Enter" 
    If TextBox1.Value = "Total Expense" Then 
     TextBox1.Value = "" 
    End If 
End Sub 

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    Debug.Print "Exit" 
    If TextBox1.Value = "" Then 
     TextBox1.Value = "Total Expense" 
    End If 
End Sub 
+0

我已經能夠通過將其更改爲afterupdate來獲取退出函數。我現在得到的問題是,只有在第一次點擊框中輸入纔會運行。 – Histerical

+0

這是因爲AfterUpdate(和BeforeUpdate)僅在文本框的內容實際發生更改時觸發。當Enter事件將值更改爲「」時,內容會自動在第一次更改。下一次輸入時,該值已經是「」,並且未被修改。 編輯:如果您在文本框中鍵入內容,退出它,然後刪除該條目並再次離開,那麼AfterUpdate應該再次運行,因爲i)值已更改,並且ii)值爲空。 – Swaffle

+0

不完全是,當我打開UserForm時,它顯示「總費用」。我點擊它,它會更新爲空白以便輸入。一旦我將它放在其他位置並保留空白,它會再次更新爲「總費用」。但返回後,它保持爲「總費用」而不是空白。 – Histerical