2011-12-15 44 views
24

He utilizado el siguiente código VBA:¿Cuál es la diferencia entre el vacío y = IsEmpty() en VBA (Excel)?

Do While .Cell(i,1) <> Empty 
    ' doing things 
    i = i+1 
Loop 

para iterar a través de columnas (con valores Doble/entero) en Excel. Entonces me encontré con un caso en el que la prueba se evalúa como falsa siempre que el valor de la celda es 0. No tengo idea de cuál es la diferencia entre este caso y los que trabajan.

Si cambio el examen para:

Do While Not IsEmpty(.Cell(i,1)) 
    .. 
Loop 

que trabaja muy bien. Entonces mi pregunta es: ¿Cuál es la diferencia entre cómo se evalúa IsEmpty() y = Empty? ¿En qué casos will = Empty evalúa a True para celdas con valor 0?

+2

'Range ("A2") = 0''? Range ("A2") = Empty' '' true'? IsEmpty (Range ("A2")) '' False' Me gustaría ver un caso donde un valor de celda de 0 '= Empty' devuelve False! –

+0

Tienes razón. Ahora veo que la serie que vi antes no contiene ceros (simplemente asumí que sí), por lo que el comportamiento es consistente. – Christian

Respuesta

26

Empty se refiere a una variable que se está en su valor predeterminado. Por lo tanto, si comprueba si una celda tiene un valor de 0 = Empty, entonces devolverá verdadero.

IsEmpty se refiere a ningún valor está inicializando.

En pocas palabras, si desea ver si una celda está vacía (como no existe nada en su valor), utilice IsEmpty. Si desea ver si algo está actualmente en su valor predeterminado, utilice Empty.

+1

No me di cuenta de que 0 es el valor predeterminado de una celda de Excel, pero es bueno saberlo. – Christian

+4

Sí, use IsEmpty para ver si una celda está vacía. Pero Empty es solo una constante con un valor de cero: no se refiere a que una variable tenga su valor predeterminado: es un acceso directo a vbEmpty, que es parte de un Enum y tiene un valor de cero. El valor predeterminado de una celda de Excel es que no tiene ningún valor (es IsEmpty): si asigna esto a una variable numérica, se convierte a cero. –

+0

@ Jean-Francois: tiene razón: de la ayuda de VBA: la palabra clave Empty se utiliza como un subtipo de variante. Indica un valor de variable Variant no inicializado. –

-4

Creo IsEmpty es sólo método que toma valor de retorno de la célula y comprueba si su vacío así: IsEmpty (.Cell (i, 1)) hace ->

return .Cell(i,1) <> Empty 
+0

@Christian 'No IsEmpty (Sheets ("Resultados"). Las células (i, 1))' ¿Pensaste en "No" en la lógica del ur? –

+0

Desafortunadamente, este no puede ser el caso en mi sistema. Cuando lo hago 'Do While Not Is Empty (Hojas (" Resultados "). Celdas (i, 1)) Hojas (" Resultados "). Celdas (i, 2) .Valor = (Hojas (" Resultados "). Las células (i, 1) <> vacío) Loop' I consiguen una columna adyacente de booleanos, donde 0 corresponde a Falso, mientras que otros valores corresponden a True. – Christian

+0

Not IsEmpty() debería ser lógicamente equivalente a <> Empty, ¿no crees? I.e. si la sentencia <> Empty alguna vez se evalúa como falsa, entonces el ciclo con la condición Not IsEmpty() debería terminar. – Christian

4

De la Ayuda:
IsEmpty devuelve verdadero si la variable no está inicializada, o se establece explícitamente en vacío; de lo contrario, devuelve False. False siempre se devuelve si la expresión contiene más de una variable.
IsEmptysolo devuelve información significativa para las variantes.

Para comprobar si una célula está vacía, puede utilizar cell(x,y) = "".
que te pueden finalmente ahorrar tiempo utilizando Range("X:Y").SpecialCells(xlCellTypeBlanks) o xlCellTypeConstants o xlCellTypeFormulas

+5

'cell (x, y) =" "' devolverá True para una celda no vacía que contenga '=" "'. Por lo tanto, es más consistente usar 'IsEmpty (celda (x, y))'. BTW 'cell (x, y)' devuelve una Variant, por lo que es un caso de libros de texto para IsEmpty. –

Cuestiones relacionadas