2016-04-28 2 views
0

Я пытаюсь выяснить, как получить текстовое поле в excel userform для обновления, как текстовое поле HTML. Например, если у вас установлено значение по умолчанию «Имя», и вы нажмете в этом текстовом поле, оно исчезнет и вы введете. Когда вы выйдете, если вы ничего не написали, он вернется к default «Имя».Userform Textbox для работы как текстовое поле 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 

Выходной выход не работает, пока я не закрою пользовательскую форму. Я также попытался проиграть и получить фокус, не повезло с ними вообще. Я также пробовал до и после, но они работают только в первый раз. Я хочу, чтобы он исчезал каждый раз, когда вы нажимаете в поле, если это значение «Общий расход». Как я могу получить выход или что-то похожее на запуск, когда я покидаю текстовое поле?

Userform

ответ

1

Я попытался с помощью кода для входа и выхода, и он работал на меня с испытательным UserForm. Он корректно обновляет поле и печатает «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

Я смог получить функцию выхода, изменив ее на последующий период. Проблема, которую я получаю сейчас, заключается в том, что ввод выполняется только при первом щелчке в поле. – Histerical

+0

Это потому, что AfterUpdate (и BeforeUpdate) запускается только в том случае, если содержимое текстового поля фактически изменено. Содержимое автоматически изменяется в первый раз, когда событие Enter меняет значение на «». При следующем входе значение уже «», и оно не изменяется. edit: Если вы введете что-то в текстовое поле, выйдите из него, а затем удалите эту запись и оставьте снова, ТОГДА AfterUpdate должен работать второй раз, потому что и i) значение изменилось, и ii) значение пустое. – Swaffle

+0

Не совсем, когда я открываю UserForm, он показывает «Total Expense». Я нажимаю его, он обновляется до пустого, чтобы ввести его. Как только я оставлю его для чего-то другого и оставьте его пустым, он снова обновится до «Total Expense». Но по возвращении он остается как «Общий расход», а не пустым. – Histerical

Смежные вопросы