Como usar el control FOR de Visual Basic

Cerrado
Eduardo86 - 11 ago 2009 a las 18:08
 Eduardo86 - 12 ago 2009 a las 20:27
Hola amigos. Estoy aprendiedo a usar visual basic y Tengo el siguiente problema. Quiero realizar un for que me controle las filas de una archivo en Excel. El for está dentro de un If, el cual me dirá: si "Xs" celda esta vacía entonces elimina "Xs" filas. El problema está en la función de eliminar las filas estoy utiliza Rows("O:O").Select .. yo definí O como una variable, y la coloco dentro de esta función para que mientras me vaya variando el FOR ella vaya "seleccionando" las filas a eliminar. El problema está, es que no me reconoce la letra O dentro de la funcion Rows. El código que utilicé es este:

Dim O As Double
O = 3
Range("A3").Select
If IsEmpty(Range("A3")) Then
For i = 3 To 6
Rows("O:O").Select
Selection.Delete Shift:=xlUp
O = O + 1
Next
End If

Espero ser lo mas explicito posible. Agradezco su colaboración de antemano. Gracias!

3 respuestas

Hola Eduardo:

Fijate en esto a ver si te funciona.

En la planilla Excell donde estas trabajando, creá una nueva macro, asignale la letra "a" para que despues puedas llamarla presionando simultáneamente las teclas "Ctrl +A", una vez hecho esto, graba la macro, y abrela con el editor de Visual Basic.

Dentro de dicho macro copia este código, que hicimos especialmente para ti, y que esta suficientemente explicado:
-----------------------------------------------------------------------------------------------------------
Sub Macro1()
'
' Macro1 Macro
'
' Acceso directo: CTRL+a
'
'Declaramos variables para los bucles for para recorrer filas y columnas
Dim filas As Long, columnas As Long
'Declaramos variable del tipo integer para determinar si la fila esta vacía
Dim filavacia As Integer
'Declaramos variables para establecer el total de columnas y filas actuales
Dim totalcolumnas As Long, totalfilas As Long
'asignamos a la variable totalcolumnas, el total de columnas de la hoja activa
totalcolumnas = ActiveCell.SpecialCells(xlLastCell).Columns.Column
'lo mismo para la variable total filas
totalfilas = ActiveCell.SpecialCells(xlLastCell).Rows.Row
'Iniciamos los bucles for
'Este es para recorrer todas las filas hasta el valor establecido en la variable totalfilas
'Porque comenzamos en 2?. Porque se supone que la primera fila si o si está escrita
'dado que tendrían que estar los títulos o referencias.
For filas = 2 To totalfilas
'establecemos el valor de la variabloe filavacia a cero.
filavacia = 0
'una vez en cada fila iniciamos el bucle for para recorrer cada columna
For columnas = 1 To totalcolumnas
'si el valor de la celda recorrida en esta instancia es nulo
'se incrementa la variable filavacía en mas uno.
If Cells(filas, columnas).Value = "" Then
filavacia = filavacia + 1
End If
'dentro de la misma fila, vamos a la siguiente columna.
Next columnas
'Si la variable filavacia es 0 a el total de columnas que se encuentra establecido
'en la variable totalcolumnas, entonces...
If filavacia = totalcolumnas Then
'Seleccionamos esa celda
Cells(filas, columnas).Select
'De la celda activa, seleccionamos la fila entera
ActiveCell.EntireRow.Select
'Borramos dicha fila, donde previamente hemos establecido, que ninguna de las
'celdas contiene información.
ActiveCell.EntireRow.Delete
End If
'avanzamos para examinar la siguiente fila.
Next filas
End Sub

'De esta manera evitamos borrar una fila que pueda contener en algunas de sus
'celdas información valiosa.
-----------------------------------------------------------------------------------------------------------

Finalmente en la hoja primera de Excell, nosotros pusimos información mas o menos de esta manera:

Apellido Nombres Teléfono Localidad
Méndez Luis 25632 Bragado
Castro Jorge 56552 Bragado

Santellan Anibal 745454 Capital

12544 Chivilcoy

Alberti
-----------------------------------------------------------------------------------------------------------
Observarás que en esta hoja excell hay lineas vacías, y lineas que en algunas celdas tienen información.

Observa que cuando ejecutas la macro, solo las filas totalmente vacías se eliminan, y las que en algunas celdas tienen información permanecen inalterables.
-----------------------------------------------------------------------------------------------------------

Bueno un abrazo, en la esperanza que nuestra ayuda te haya sido util.

A tu disposición ante cualquier consulta.


Luis
----------------------------
Webs
----------------------------
www.bragadomas.com.ar
www.bragadomas.com
https://bragadohoy.blogspot.com/
----------------------------
Mail
----------------------------
info@bragadomas.com
----------------------------
Foros:
----------------------------
http://www.foroswebgratis.com/foro-foro_de_programacion_en_general-152776.htm
http://www1.bragadomas.com/?tm=1&kw=music&KW1=Searchable%20MP3%20Database%20Software&KW2=Music%20Streaming%20Dedicated%20Server&KW3=Ringtone%20Database%20Management%20Software&searchbox=0&domainname=0&backfill=0
----------------------------
6
Hola Eduardo:

Si no lo entiendes y nos dejas un mail, te enviamos el proyecto.

Atentamente.


Luis
----------------------------
Webs
----------------------------
www.bragadomas.com.ar
www.bragadomas.com
https://bragadohoy.blogspot.com/
----------------------------
Mail
----------------------------
info@bragadomas.com
----------------------------
Foros:
----------------------------
http://www.foroswebgratis.com/foro-foro_de_programacion_en_general-152776.htm
http://www1.bragadomas.com/?tm=1&kw=music&KW1=Searchable%20MP3%20Database%20Software&KW2=Music%20Streaming%20Dedicated%20Server&KW3=Ringtone%20Database%20Management%20Software&searchbox=0&domainname=0&backfill=0
----------------------------
0
Mil gracias amigo Luis. Me sirvio de muchisima ayuda el código que me enviaste. Me elimina perfectamente las filas vacías que se encuentran en la hoja de calculo, sin embargo tengo dos dudas. La 1ra es, si en el caso de que yo quiera eliminar las filas cuyo "parámetro" para la eliminación sea, que la 1ra celda de esa columna este vacía, como sería?... es decir, en vez de recorrer toda la fila, solo compruebo que esté vacía la 1ra celda, no tendría que recorrer las demas columnas de esa fila. Ejm: Fila 1, lo que me interesa saber si está vacía es la celda A1 y si esta vacia esa celda (A1) elimino la fila completa. a eso me refiero. He probado con tu código, eliminando el ciclo que recorre las columnas pero no me funciona, si me pudieras echar una mano, se que de tu código se puede sacar, de todas maneras estaré intentandolo.

La 2da duda que tengo es, cuando pongo a correr el macro con el código que me envias, el me elimina la primera fila vacía que encuentre, tengo que presionar nuevamente CTRL + a para eliminar la siguiente que consiga y volver a presionar CTRL... para eliminar todas. ¿Existe alguna forma de que presionando una sola vez CTRL+a me elimine todas las filas vacías de un solo golpe?... Bueno, muchisimas gracias de ante mano amigo luis por la ayuda brindada. mi mail es efreitas4@gmail.com. Un abrazo Hermano.
0