Comportamiento anomalo de Excel?

3 envíos / 0 nuevos
Último envío
Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Comportamiento anomalo de Excel?

Tengo una pequeña rutina en VBA que a mi modo de entender, muestra un comportamiento anomalo en Excel, aunque dejo la puerte abierta a una posible explicacion.

En el ejemplo que incluyo se puede verificar facilmente.

Sobre una Hoja tengo las celdas ocupadas desde A1 hasta A10.

La macro va a recorrer las 10 primeras filas y en el caso de que sea la fila 5, debe borrar la linea y subir el resto de las celdas hacia arriba.

Para ello la he rellenado de color verde para que se vea facilmente.

Pues bien:

Cuando es la linea 1, todo bien. Pone en la celda B1 la frase "No borrada" y sigue.

En la linea 2 hace lo mismo... Y asi en la tercera y en la cuarta.

Pero al llegar la linea 5, selecciona "equivocadamente" la linea 6 en lugar de la 5, a pesar de que el contador de lineas, nFila tiene el valor 5. Y claro elimina la linea seleccionada que es la 6, y pone en la celda B5 la frase "Borrada". Es facil hacer este analisis ejecutando la macro, paso a paso con F8.

Es decir, siguiento el contador de nFila, encuentro que el programa selecciona  en este orden de filas: 1,2,3,4,6,7,8,9,10

Da un salto del 4 al 6... para mi inexplicable...

Obvio que en este progtrama de ejemplo que incluyo, no deja de ser anecdotico. Pero he llegado a esto porque en un programa de mayor envergadura, he detectado esa situacion... inexplicable para mi, y sin poder encontrar la solucion, claro esta.

 

Sub Prueba()

Dim nFila As Integer

nFila = 1

Do While nFila < 11

    Rows(nFila & "," & nFila).Select

        If nFila = 5 Then

            Selection.Delete Shift:=xlUp

            Cells(nFila, 2).Value = "Borrada"

        Else

             Cells(nFila, 2).Value = "No Borrada"

        End If

    nFila = nFila + 1

Loop

End Sub

Alguien sabe el por que?

Envio comofichero adjunto, la Hoja con el macro.

Saludos cordiales

Jose Luis

 

AdjuntoTamaño
File prueba_curiosa.xlsm16.5 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Es que estás seleccionando

Es que estás seleccionando mal la fila. Si pones un punto de interrupción y vas viendo paso a paso verás que las filas que seleccionas son la 11, 22, 33, 44... la fila que estás borrando es la 55.

Prueba a seleccionar la fila con :

cells(nFila, 1).entirerow.select

 

Me gusta más, es más claro. No obstante, tu construcción también es correcta, pero has cometido un pequeño error que es lo que lo estropea todo. Cuando seleccionas una fila con Rows, pones dos argumentos que son fila inicial y fila final, pero no se separan con coma, sino con dos puntos. Tu macro también funciona perfectamente con:

Rows(nFila & ":" & nFila).Select

Ten en cuenta que tal y como tienes el código, va a escribir "borrada" en la fila que no has borrado (primero la borras, luego escribes). Por lo tanto, verás "Esta debe quedarse" 9 veces y "No borrada" o "Borrada" un total de 10 veces. Si le das la vuelta, primero escribes "Borrada" y luego borras no tendrás problemas.

Un saludo

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Hola Cron:Muchas gracias,

Hola Cron:

Muchas gracias, (otra vez mas...) por tu ayuda, comenario y leccion.

He probado, claro esta, haciendo el cambio que me sugieres, y CIERTO... funciona correctamente.

Hombre... Ya me parecia a mi que seria poco menos que imposible que eso fuera un simple "bug" del Excel... :) :) :)

La explicacion era mucho mas prosaica: el defecto de la sintaxis al poner una coma en lugar de dos puntos...

Con la de vueltas que le he estado dando al programa con ese fallo...  Al final tuve que cambiar montones de lineas para conseguir hacer lo que queria, pero claro, se quedo sin resolver el tema del por que salia ese fallo...

Hasta ahora. Gracias Cron, como digo, una vez mas.

Cuidate... por la cuenta que me tiene para una proxima oportunidad...

Saludos cordiales.

Jose Luis