Eu trabalharia com manipulador de eventos usando um Modulo de Classe e WithEvents, observando que WithEvents é válido somente em um módulo de classe, assim não necessitamos escrever nenhum linha em qualquer dos textbox, uma vez que ao inicializar o formulário é criado um array que serve para aplicar a formatação para qualquer um deles.
Faça da seguinte forma:
1 º) Crie um MODULO DE CLASSE e cole as instruções abaixo :
Public WithEvents TextBoxFormat As MSForms.TextBox
Private Sub TextBoxFormat_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim i As Integer, T As String
'Limita a Qde de caracteres
'TextBoxFormat.MaxLength = 9
With TextBoxFormat
T = .Text
i = Len(T) - .SelStart
T = Replace(.Text, ",", "")
If Len(T) < 3 Then T = String(3 - Len(T), "0") & T
T = Mid(T, 1, Len(T) - 2) & "," & Mid(T, Len(T) - 1)
T = Format(T, "#,##0.00")
If .Text <> T Then .Text = T
.SelStart = Len(T) - i
End With
End Sub
2º ) De dois clique no Formulário e apqgue todas as instruções que e encontram no mesmo, e cole as instruções abaixo :
Option Explicit
Dim ArrayTextboxs() As New Classe1
'Cria um array dos Textbox no formulário uma unica vez
Private Sub UserForm_Initialize()
Dim i As Integer, TBCtl As Control
For Each TBCtl In Me.Controls
If TypeOf TBCtl Is MSForms.TextBox Then
i = i + 1
ReDim Preserve ArrayTextboxs(1 To i)
Set ArrayTextboxs(i).TextBoxFormat = TBCtl
End If
Next TBCtl
Set TBCtl = Nothing
End Sub
Veja que no formulário a única linh de código que iremos ter é a do "UserForm_Initialize" onde iremos criar o array dos Textbox.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 23/08/2015 3:05 pm