2016-08-08 2 views
2

У меня есть Userform, который включает текстовые поля с несколькими форматами. У меня есть Initialize as blank (""), а затем отформатируйте их, используя afterupdate(). Все это прекрасно работает, мои проблемы возникают из-за возможности пропустить пользователя, вводя данные в первую очередь, или просто бесцельно нажав на экран. После ввода значения оно форматирует его правильно, когда вы переходите из текстового поля. Но если вы повторно выбираете текстовое поле, то снова отходите, оно очищает значение. И если вы сделаете это с текстовым полем, которое отформатировано как процент, на самом деле это ошибка с ошибкой несоответствия.Форматирование текстовых полей в форме пользователя

Вот кусочек моего текущего кода:

Private Sub UserForm_Initialize() 

    ValueAnalysisTextBox.Value = "" 

    CapRateTextBox.Value = "" 

End Sub 

Private Sub ValueAnalysisTextBox_AfterUpdate() 

    ValueAnalysisTextBox.Value = Format(Val(ValueAnalysisTextBox.Value), "$#,###") 

End Sub 

Private Sub CapRateTextBox_AfterUpdate() 

    CapRateTextBox.Value = Format(Val(CapRateTextBox.Value)/100, "Percent") 

End Sub 

Любые мысли о том, чтобы очистить это было бы здорово.

+0

форматирование должно быть сделано во время выполнения кода , Если вы хотите, чтобы пользователь посмотрел, как будет выглядеть конечный результат, я рекомендую использовать ярлыки вместо текстовых полей, чтобы отобразить форматированный текст. – tigeravatar

+0

Если вам нужен форматированный текст, который должен быть в текстовом поле, вам нужно ввести чек в код 'After_Update', чтобы узнать, находится ли значение текстового поля в нужном формате и если да, не вносите никаких изменений. – tigeravatar

ответ

0

Это то, что вы пытаетесь?

Private Sub ValueAnalysisTextBox_AfterUpdate() 
    Dim amt As Double 

    amt = Val(Replace(ValueAnalysisTextBox.Value, "$", "")) 

    ValueAnalysisTextBox.Value = Format(amt, "$#,###") 
End Sub 

Private Sub CapRateTextBox_AfterUpdate() 
    Dim Perct As Double 

    Perct = Val(Replace(CapRateTextBox.Value, "%", ""))/100 

    CapRateTextBox.Value = Format(Perct, "Percent") 
End Sub 

Примечание: Я не делаю какой-либо другой обработки ошибок. Например, пользователь вводит «Blah Blah» или вставляет что-то еще в текстовое поле. Я уверен, что вы справитесь с этим.

+0

Это я для меня такой же результат. Если в текстовом поле уже есть значение, и вы вводите текстовое поле и выходите из него снова. Он очищает исходное значение. –

+0

Я попробовал, и он работает отлично для меня? Это ',' ваш десятичный разделитель? –

0

Я бы хранить основные ценности в .Tag свойство TextBox, а затем использовать его, чтобы изменить форматирование назад и вперед в входа и выхода из событий:

Private Sub UserForm_Initialize() 
    ValueAnalysisTextBox.Value = vbNullString 
    ValueAnalysisTextBox.Tag = vbNullString 
End Sub 

Private Sub ValueAnalysisTextBox_Enter() 
    ValueAnalysisTextBox.Value = ValueAnalysisTextBox.Tag 
End Sub 

Private Sub ValueAnalysisTextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    If IsNumeric(ValueAnalysisTextBox.Value) Then 
     ValueAnalysisTextBox.Tag = Val(ValueAnalysisTextBox.Value) 
     ValueAnalysisTextBox.Value = Format$(ValueAnalysisTextBox.Tag, "$#,###") 
    Else 
     ValueAnalysisTextBox.Tag = vbNullString 
    End If 
End Sub 
Смежные вопросы