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 10 meses

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 5 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.