Julia , en aras de seguir practicando , puse en practica tu sugerencia. Despues de varios intentos lo logre utilizando el ciclo al reves, pues , me paso que cuando me encontraba una celda vacia , al eliminarla y reajustar la variable contador , esta dejaba fijo como valor final , el valor inicial de rango.rows.count.
Dim Opción As Variant Dim Texto As String Dim Rango As Range Dim i As Integer Set Rango = Selection
Select Case Opción Case 1 For i = Rango.Rows.Count To 1 Step -1 If Rango(i).Value <> "" Then Rango(i).Value = VBA.UCase(Rango(i).Value) Else Rango(i).EntireRow.Delete End If Next Case 2 For i = Rango.Rows.Count To 1 Step -1 If Rango(i).Value <> "" Then Rango(i).Value = VBA.LCase(Rango(i).Value) Else Rango(i).EntireRow.Delete End If Next Case Else MsgBox "Debes elegir una opción válida", vbExclamation End Select
Muy buen trabajo, Osmani. Se nota el empeño por practicar y probar distintas formas de resolverlo. Recorrer el rango de abajo hacia arriba fue una elección acertada, porque evita los desajustes al eliminar filas. Tu solución queda clara, ordenada y demuestra que estás experimentando y entendiendo cada paso.
Muy buena la macro, hice la prueba y funciona muy bien en la columna. ahora imagine mas datos "curso de vba" en un rango mas amplio osea con mas columnas y dentro de las columnas celdas en blanco al azar. En lo que va del curso aun no se como se realiza, asi que apoyandome de la AI. me entrego la siguiente macro.
Aclaro con la macro siguiente solo dan ganas de conocer y aprender mas, estoy seguro que con este curso de deztaca lograre realizar macros similares y mas avanzadas.
Sub ConvertirYReorganizar()
Dim Opcion As Variant Dim Texto As String Dim Rango As Range Dim Col As Range Dim Celda As Range Dim i As Long Dim Valores() As Variant Dim Contador As Long
Set Rango = Selection
'Validacion de la seleccion de celdas
If Rango.Cells.Count = 1 Then MsgBox "Debes seleccionar un rango de varias celdas.", vbExclamation, "Rango insuficiente" Exit Sub End If
If Rango.Rows.Count = Rows.Count Then MsgBox "No selecciones toda la hoja. Selecciona solo el rango necesario.", vbExclamation Exit Sub End If
Select Case Opción Case 1 For i = 1 To Rango.Rows.Count Rango(i).Value = VBA.UCase(Rango(i).Value) Next Case 2 For i = 1 To Rango.Rows.Count Rango(i).Value = VBA.LCase(Rango(i).Value) Next Case Else MsgBox "Debes elegir una opción válida", vbExclamation End Select
Buen ejercicio, la lógica está correcta y el Select Case está bien aplicado.
Para seguir practicando considera que el código recorre también las celdas vacías; no da error, pero sería buena práctica validar que la celda tenga texto antes de aplicar UCase o LCase.
Te animo a que pruebes agregar esa validación como mejora y nos cuentes cómo te fue.
hola. muy interesante. En mi trabajo elaboro constancias DC-3, de 1 a N constancias de un solo curso. es muy variado. Tengo el código, lo complejo es cuando hago mas constancias tengo que agregar filas al código. (es decir adecuo las filas para el numero de constancias) lo que me gustaría saber es como hacer para que ejecute una macro e imprima el numero de celdas con datos (ejemplo si tengo datos en la lista del 1 al 9, (como ejemplo de la foto) que imprima 9 constancias), o en su caso que me aparezca cuadro de dialogo ¿cuantas constancias desea imprimir? y que de acuerdo a ese dato o istruccion elabore constancias si modificar codigo. saludos Les agradezco ojala me puedan orientar
Hola, Francisco. Si ya tienes una macro funcional, un buen siguiente paso sería experimentar con bucles para automatizar la impresión según los registros con datos. También podrías probar a contar las filas activas y usar un cuadro de diálogo tipo InputBoxque te permita ingresar cuántas constancias deseas imprimir, sin necesidad de ajustar el código manualmente cada vez.
Te animo a que lo vayas probando poco a poco para que entiendas bien cómo se comporta la macro, y si alguien de la comunidad ya ha aplicado algo parecido, estaría genial que lo comparta. Seguro entre todos encontramos la forma de resolverlo.
Inicia sesión para dejar tu duda, comentario y/o respuesta