Clase en vivo privada este viernes 17 de octubre de 2025. Clic aquí.
Cursos Clases en vivo Foro Ranking estudiantes Blog
Iniciar sesión Inscribirme

Es necesario estar inscrito para dejar tu duda, comentario y/o respuesta

Todo

Sin respuesta

Solo preguntas

Excel

Power BI

Power Query

Power Pivot

DAX

Macros VBA

SQL

Comentarios en clases

Elena-G publicó en la clase Caso práctico: Cambiar texto a MAYÚSCULAS hace 1 año

Hola, respondiendo al ejercicio:

Como hacer un macro que permita elegir entre Mayúsculas y Minúsculas. Tengo la siguiente propuesta:

Sub Convertir_Mayusc_Minusc()

Dim Celda As Range
Dim Texto As String
Dim Opción As Byte

Texto = "Elige una opción:" & vbNewLine & _
    vbNewLine & "1. MAYÚSCULAS" & _
    vbNewLine & "2. minúsculas"
    
Opción = InputBox(Texto, 1)

Select Case Opción
    Case 1
         For Each Celda In Selection
               Celda.Value = VBA.UCase(Celda)
        Next Celda
    Case 2
          For Each Celda In Selection
                Celda.Value = VBA.LCase(Celda)
        Next Celda
    Case Else: MsgBox "Elegiste un valor no asignado": Exit Sub
      
End Select

Respuestas

JuliaBravo490 respondió hace hace 7 meses:

¡Buena propuesta, Elena! 

Tu macro tiene una buena estructura para permitir la conversión de texto a mayúsculas o minúsculas, pero hay un pequeño detalle: InputBox devuelve un valor de tipo String, por lo que al asignarlo a Opción, que es de tipo Byte, puede haber errores si el usuario ingresa un valor no numérico.

Corrección recomendada: Convertir explícitamente la entrada a número con CLng y validar que sea un valor esperado antes de continuar.

Versión mejorada de tu macro:
Sub Convertir_Mayusc_Minusc()
    Dim Celda As Range
    Dim Texto As String
    Dim Opción As Variant ' Cambiado a Variant para manejar mejor la entrada del usuario
 
    Texto = "Elige una opción:" & vbNewLine & _
        vbNewLine & "1. MAYÚSCULAS" & _
        vbNewLine & "2. minúsculas"
 
    Opción = InputBox(Texto, "Conversión de texto")
 
    ' Validar que la entrada sea un número
    If Not IsNumeric(Opción) Then
        MsgBox "Por favor, ingresa un número válido (1 o 2).", vbExclamation
        Exit Sub
    End If
 
    Select Case CLng(Opción)
        Case 1
            For Each Celda In Selection
                Celda.Value = VBA.UCase(Celda.Value)
            Next Celda
        Case 2
            For Each Celda In Selection
                Celda.Value = VBA.LCase(Celda.Value)
            Next Celda
        Case Else
            MsgBox "Elegiste un valor no asignado", vbExclamation
    End Select
End Sub

Mejoras aplicadas:
- Se usa Variant en lugar de Byte para evitar errores de tipo de dato.
- Se valida que la entrada sea numérica antes de procesarla.
- Se usa CLng(Opción) en Select Case para evitar problemas de comparación de tipos.
- Se agrega un mensaje de advertencia si el usuario ingresa un valor inválido.

Con estos ajustes, tu macro será más robusta y evitará posibles errores.
Cursos Foro Clase en vivo Validar certificado Iniciar sesión Inscribirme Términos y condiciones
Facebook Instagram Linkedin
Deztaca Experience
© 2025 © Deztaca. Todos los derechos reservados.