Elena-G publicó en la clase Caso práctico: Cambiar texto a MAYÚSCULAS hace 6 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
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 1 mes:
¡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.
- 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.