Copiar celdas VACIAS vs. VALOR 0

27/12/2006 - 19:58 por Sho mismo | Informe spam
Buenas,
Estoy empezando en esto de la programacion en VBA en excel y me
encuentro con el siguiente problema, al copiar un rango de celdas con
el siguiente codigo:

ActiveSheet.Range("descripcion_1").Value ActiveSheet.Range("descripcion_2").Value

El problema aparece con las celdas VACIAS, que son sustituidas por un
valor 0.
¿puede evitarse dejando vacias las celdas de destino si esta vacias en
origen?
Bueno, espero haber aclarado mi problema.
Un saludo, y gracias por adelantado.
Carlos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/12/2006 - 03:56 | Informe spam
hola, ?

Estoy empezando en esto de la programacion en VBA en excel y me encuentro con el siguiente problema
al copiar un rango de celdas con el siguiente codigo:
ActiveSheet.Range("descripcion_1").Value = ActiveSheet.Range("descripcion_2").Value
El problema aparece con las celdas VACIAS, que son sustituidas por un valor 0.
puede evitarse dejando vacias las celdas de destino si esta vacias en origen?



el 'detalle' esta en que la propiedad '.Value' de una celda 'vacia'... excel [y vba] lo consideran/leen/toman/... como cero [0]
si estas 'trabajando' -siempre- sobre la hoja activa... [y a reserva de que comentes algun detalle 'perdido' en el tintero]...
prueba haciendo una copia de origen en destino [p.e.]:
Range("descripcion_1").Copy Destination:=Range("descripcion_2")

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Sho mismo
28/12/2006 - 11:14 | Informe spam
Buenas,
el consejo funciona muy bien con los valores 0, pero no me sirve, al
tener las celdas origen y destino distinto formato.
La celda que almacena los registros es una celda normal, mientras que
la de destino está combinada con otra, con lo que el metodo copia me
da error.
¿Alguna idea para evitar eso?
gracias de nuevo, y un saludo


Héctor Miguel ha escrito:

hola, ?

> Estoy empezando en esto de la programacion en VBA en excel y me encuentro con el siguiente problema
> al copiar un rango de celdas con el siguiente codigo:
> ActiveSheet.Range("descripcion_1").Value = ActiveSheet.Range("descripcion_2").Value
> El problema aparece con las celdas VACIAS, que son sustituidas por un valor 0.
> puede evitarse dejando vacias las celdas de destino si esta vacias en origen?

el 'detalle' esta en que la propiedad '.Value' de una celda 'vacia'... excel [y vba] lo consideran/leen/toman/... como cero [0]
si estas 'trabajando' -siempre- sobre la hoja activa... [y a reserva de que comentes algun detalle 'perdido' en el tintero]...
prueba haciendo una copia de origen en destino [p.e.]:
Range("descripcion_1").Copy Destination:=Range("descripcion_2")

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
28/12/2006 - 21:27 | Informe spam
hola, ?

... funciona muy bien con los valores 0, pero no me sirve, al tener las celdas origen y destino distinto formato.
La celda que almacena los registros es una celda normal, mientras que la de destino está combinada con otra
con lo que el metodo copia me da error. Alguna idea para evitar eso?



tal como te comentaba en el mensaje anterior...
-> "... a reserva de que comentes algun detalle 'perdido' en el tintero..."

1) las celdas combinadas [en ocasiones] suelen llegar a ser toda una 'odisea' para navegar 'tranquilamente' por la hoja :-(

2) si los rangos de 'origen' y 'destino' son distintos [probablemente]...
lo mas 'adecuado' sera un recorrido por bucles segun el numero de filas/columnas del rango de origen
que [p.e.] vaya 'pasando' los valores solo de aquellas celdas que no esten 'vacias' [para no sobre-escribir formatos] -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Sho mismo
29/12/2006 - 09:20 | Informe spam
Buenas,

Al final fui colocando un IF para cada valor copiado en busca de esos
valores 0 para forzar el valor "".
Algo me dice que no es lo más limpio del mundo (han sido unas
cuantas), pero el tiempo apremiaba.
Al final cada copia se parece a:

If Cells(98, "AJ").Value = 0 Then
ActiveSheet.Range("CAPA2_MURO_FAM").Value = ""
Else
ActiveSheet.Range("CAPA2_MURO_FAM").Value = Cells(98, "AJ").Value
End If

Gracias por los mensajes, siempre se aprende algo por el camino,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida