Línea macro para 24 TextBox con 1ª letra Mayúscula

El titulo lo dice todo. En que los TextBox solo acepten minúsculas pero que la 1ª Letra de Cada Palabra Sea Mayúscula

Para uno, no tengo dificultad para solo minúsculas o SOLO MAYÚSCULAS pero para con la 1ª letra de cada Palabra en Mayúsculas si. Son 12 en un form y 14 en otro son 26.

Entonces quisiera para los 12 yo luego acomodaría para los 14

Entre los 12 y 14 hay algunos que son numéricos (que llevan SOLO números, por eso creo que un Array va mejor porque el Array se puede nombrar los que si llevaran la 1ª letra de cada palabra en Mayúsculas.

El evento no se cual mejor, si un _Gange tal vez

1 Respuesta

Respuesta
2

Puedes poner en el evento change de cada textbox así:

Ejemplo para 3 textbox, tendrías que hacerlo para tus 26.

Private Sub TextBox1_Change()
    TextBox1 = Application.Proper(TextBox1)
End Sub
Private Sub TextBox2_Change()
    TextBox2 = Application.Proper(TextBox2)
End Sub
Private Sub TextBox3_Change()
    TextBox3 = Application.Proper(TextBox3)
End Sub

O puedes crear una clase así:

1. Inserta un módulo de clase,

2. En el name de la clase pon el nombre "Clase1"

3. Pega el siguiente código

Option Explicit
Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
'Referencia
'http://www.ozgrid.com/forum/showthread.php?t=80631
Private Sub tbxCustom1_Change()
    tbxCustom1 = Application.Proper(tbxCustom1)
End Sub
Private Sub Class_Terminate()
     'Destroy The Class Object And Free Up Memory
    Set tbxCustom1 = Nothing
End Sub

4. En tu formulario pon el siguiente código

Dim colTbxs As Collection 'Collection Of Custom Textboxes
Private Sub UserForm_Initialize()
    Dim ctlLoop As MSForms.Control
    Dim clsObject As Clase1
    'Create New Collection To Store Custom Textboxes
    Set colTbxs = New Collection
    'Loop Through Controls On Userform
    For Each ctlLoop In Me.Controls
         'Check If Control Is A Textbox
        If TypeOf ctlLoop Is MSForms.TextBox Then
             'Create A New Instance Of The Event Handler CLass
            Set clsObject = New Clase1
             'Set The New Instance To Handle The Events Of Our Textbox
            Set clsObject.tbxCustom1 = ctlLoop
             'Add The Event Handler To Our Collection
            colTbxs.Add clsObject
        End If
    Next ctlLoop
End Sub
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

Nota: La declaración debe ir hasta el principio de todo el código del user form

Dim colTbxs As Collection 'Collection Of Custom Textboxes

Te anexo mi archivo con los 2 ejemplos.

https://www.dropbox.com/s/m9tuc7x1yksuo7m/clase%20textbox%20nombre%20propio.xlsm 

Saludos. Dante Amor

No olvides valorar la respuesta.

¡Gracias! Dante

Ya lo tengo en uno per ohacerlo para 2 grupos, quisiera tenerlo en 2 grupos si pero con código más corto si posible, si n oes posible, pues así motire para cada TextBox.

Saludos

Ok, ok, baje tu ejemplo y me sirve con el modulo de clase, muy bien.

Mi pregunta es en un form de 4 pestañas con Select Case, va solamente en el initial del form? donde tengo las 4 pestañas que cada una tiene un Select Case

Case 0

 Case 1

Etc

Etc

Así quedaría

Private Sub UserForm_Initialize()
    Dim ctlLoop As MSForms.Control
    Dim clsObject As Clase1
    'Create New Collection To Store Custom Textboxes
    Set colTbxs = New Collection
    'Loop Through Controls On Userform
    For Each ctlLoop In Me.Controls
         'Check If Control Is A Textbox
        If TypeOf ctlLoop Is MSForms.TextBox Then
            Select Case ctlLoop.Name
            'agregar los textbox que sí entran en Tipo Título
            Case "TextBox1", "TextBox3"
                 'Create A New Instance Of The Event Handler CLass
                Set clsObject = New Clase1
                 'Set The New Instance To Handle The Events Of Our Textbox
                Set clsObject.tbxCustom1 = ctlLoop
                 'Add The Event Handler To Our Collection
                colTbxs.Add clsObject
            End Select
        End If
    Next ctlLoop
End Sub

¡Gracias!

Esta declaración va en el inicio del código del form si no me equivoco, no dentro ode linitialise.

En mi caso seria lo mismo, (creo)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas