Как ввести числовое текстовое поле между 10-50 в процентном формате в пользовательской форме VBA? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь дать ограничениям текстовое поле между 10-50, и оно должно быть в формате процентного числа. Однако, когда я попробую этот код ниже, он отправляет окно сообщения на каждый номер, который я ввел. Что я не так с этот код? Спасибо.

        Private Sub TextBox4_Change()
        If(TextBox4.Value<50 And TextBox4.Value>5) Then
        TextBox4.Value = Format(TextBox4.Value, "0.00%")
        Else 
        Msgbox " Please enter the number between 10 -50"
        End Sub

1 Ответ

0 голосов
/ 23 мая 2019

Есть кое-что, если вы хотите защитить его от дурака. Не говоря уже о том, что это 100% решение, которое вы хотите, но в этом коде есть несколько вещей, о которых вы должны подумать ...

Private bIsChanging As Boolean

Private Sub TextBox4_Change()
    Dim dblValue As Double, bIsError As Boolean

    If TextBox4.Text = "" Then Exit Sub
    If bIsChanging Then Exit Sub

    bIsError = True

    If IsNumeric(TextBox4.Text) Then
        dblValue = CDbl(TextBox4.Value)

        If dblValue >= 0 And dblValue <= 50 Then
            bIsError = False
        End If
    End If

    If bIsError Then
        MsgBox "Please enter the number between 1 and 50."
    End If
End Sub

Private Sub TextBox4_Enter()
    On Error Resume Next

    Dim dblNewValue As Double, strFormat As String

    If TextBox4.Text = "" Then Exit Sub
    dblNewValue = CDbl(Replace(TextBox4.Value, "%", ""))

    strFormat = "0"

    If dblNewValue - (1 * (dblNewValue \ 1)) <> 0 Then
        strFormat = "0.00"
    End If

    bIsChanging = True
    TextBox4.Value = Format(dblNewValue, strFormat)
    bIsChanging = False
End Sub

Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    On Error Resume Next

    bIsChanging = True
    TextBox4.Value = Format(TextBox4.Value / 100, "0.00%")
    bIsChanging = False
End Sub

enter image description here

Он использует события входа и выхода, чтобы попытаться переформатировать ячейку от входа к выходу.

Я надеюсь, что это поможет, и я надеюсь, что я проверил это достаточно, чтобы убедиться, что он работает хорошо. : -)

...