Я хочу отформатировать любое текстовое поле для определенной пользовательской формы, показывая число в определенном формате. Я использую модуль класса, чтобы вызвать его для любого текстового поля изменения. Затем, в зависимости от имени текстового поля, я форматирую его в соответствии с желаемым форматом.Как только я начинаю набирать несколько цифр, получается несколько сумасшедших цифр, отличных от того, который я ввел. Как только я вынимаю: 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