модуль класса для изменения текстового поля - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу отформатировать любое текстовое поле для определенной пользовательской формы, показывая число в определенном формате. Я использую модуль класса, чтобы вызвать его для любого текстового поля изменения. Затем, в зависимости от имени текстового поля, я форматирую его в соответствии с желаемым форматом.Как только я начинаю набирать несколько цифр, получается несколько сумасшедших цифр, отличных от того, который я ввел. Как только я вынимаю: txtbox.Value = Format (txtbox.Value, "### ### ## 0") Я вернулся к нормальной жизни, за исключением того, что я не форматирую текстовое поле

Я пробовал с другим текстовым полем на другой пользовательской форме, и у меня все еще есть проблема

'Модуль класса" текстовое поле "

Public WithEvents txtbox As MSForms.TextBox

Public Property Set TextBox(ByVal t As MSForms.TextBox)
    Set txtbox = t
End Property

Private Sub txtbox_change()

    Dim n As Integer

    Select Case Left(txtbox.Name, 3)

        Case "EMP"
            'n = Mid(txtbox.Name, 4, 1)
            n = Val(Right(txtbox.Name, 2))
            ActiveSheet.Cells(n + 40, "fk").Value = Val(txtbox.Value)

            txtbox.Value = Format(txtbox.Value, "### ### ##0")
            'update formula side for rej EBI
            If n = 10 Then
                fillform.Controls("EBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fu").Value, "0.0%")
            Else
                fillform.Controls("EBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fu").Value, "0.0%")
                fillform.Controls("EBI" & (n - 1)).Value = Format(ActiveSheet.Cells((n - 1) + 40, "fu").Value, "0.0%")
            End If

        Case "FIL"
            'n = Mid(txtbox.Name, 4, 1)
            n = Val(Right(txtbox.Name, 2))
            ActiveSheet.Cells(n + 40, "fL").Value = Val(txtbox.Value)
            txtbox.Value = Format(txtbox.Value, "### ### ##0")
            'update formula side (%REJ ebi, & % REJ fbi)
            If n = 10 Then
                fillform.Controls("EBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fu").Value, "0.0%")
                fillform.Controls("FBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fV").Value, "0.0%")
            Else
                fillform.Controls("EBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fu").Value, "0.0%")
                fillform.Controls("EBI" & (n - 1)).Value = Format(ActiveSheet.Cells((n - 1) + 40, "fu").Value, "0.0%")

                fillform.Controls("FBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fV").Value, "0.0%")
                fillform.Controls("FBI" & (n - 1)).Value = Format(ActiveSheet.Cells((n - 1) + 40, "fV").Value, "0.0%")

            End If

        Case "FUL"
            'n = Mid(txtbox.Name, 4, 1)
            n = Val(Right(txtbox.Name, 2))
            ActiveSheet.Cells(n + 40, "fM").Value = Val(txtbox.Value)
            txtbox.Value = Format(txtbox.Value, "### ### ##0")
            'update formula side (DESVIO, & %REJ FBI)
            If n = 10 Then
                fillform.Controls("DES" & n).Value = Format(ActiveSheet.Cells(n + 40, "fT").Value, "0.0%")
                fillform.Controls("FBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fV").Value, "0.0%")
            Else
                fillform.Controls("DES" & n).Value = Format(ActiveSheet.Cells(n + 40, "fT").Value, "0.0%")
                fillform.Controls("DES" & (n - 1)).Value = Format(ActiveSheet.Cells((n - 1) + 40, "fT").Value, "0.0%")

                fillform.Controls("FBI" & n).Value = Format(ActiveSheet.Cells(n + 40, "fV").Value, "0.0%")
                fillform.Controls("FBI" & (n - 1)).Value = Format(ActiveSheet.Cells((n - 1) + 40, "fV").Value, "0.0%")

            End If

            'force to write that because of sub "Fill Data" which trigger those
            field
        Case "DES"
            'n = Mid(txtbox.Name, 4, 1)
            n = Val(Right(txtbox.Name, 2))
            ActiveSheet.Cells(n + 40, "ft").Value = Val(txtbox.Value)
            txtbox.Value = Format(txtbox.Value, "###")

        Case Else
            txtbox.Value = Format(txtbox.Value, "0.00%")
    End Select
End Sub

' code on my user form filldata

Private myEventHandlers As Collection

Private Sub UserForm_Initialize()
    Dim txtbox As mytextbox
    Set myEventHandlers = New Collection

    Dim c As Control
    For Each c In Me.Controls
        If TypeName(c) = "TextBox" Then
            Set txtbox = New mytextbox

            Set txtbox.TextBox = c

            myEventHandlers.Add txtbox
        End If
    Next c
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...