Jump to content

Macro para reescribir automaticamente fórmulas en celdas vacias


Recommended Posts

Posted

Hola,

Acerca del ejemplo del cual adjunto un ejemplo, hago la siguiente consulta:

En cada celda de la columna A tengo una fórmula. En esas mismas celdas (las de la columna A) el usuario puede escribir un número; por lo cual la formula que estaba en dicha celda se borraría.

La pregunta es ¿cómo hacer una macro para que si un usuario escribe un numero sobre la formula, y luego borra dicho número, al quedar la celda vacía en ésta se vuelva a reescribir de manera automática la formula que tenía originalmente?

Cabe destacar que no es posible bloquear la celda, porque en la misma columna A se debe poder: o escribir el número que uno quiera, o dejar que actúe la fórmula en base a los datos puestos en la columna B

Macro para formulas.xls

Posted

Lo que estás pidiendo, imagino, es que la fórmula que aparece en la columna "A" se incluyera mediante código al dejar vacía una celda.....es así?

Porque lo que es magia.....como que no.......jejeje

Un saludo,

Tese

Posted

Estimado Tese,

Lo planteo de forma diferente. Partiendo de que las celdas de la columna A no pueden estar bloqueadas, si alguien borra la fórmula de alguna celda de dicha columna, al quedar vacía la celda, que la macro reescriba la formula automáticamente. Como parámetro se puede tomar que la formula de todas las celdas es siempre la misma, con la salvedad que cambia el número de fila.

Posted

Ok, cacatua

Escribe este código en la Hoja1, no en un módulo...


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 And Target.Value = "" Then
Target.FormulaR1C1 = "=IF(RC[1]=1,""SI"",0)"
End If
End Sub
[/CODE]

Prueba a ver si es eso lo que necesitas........y cuentas....

Un saludo,

Tese

Posted

Hola:

Porque lo que es magia.....como que no.......jejeje

A veces si se puede hacer magia,......jejeje:

Haz una copia de la Hoja1 con el nombre "Copia" y ocúltala

Y coloca esta macro en la Hoja1

Private Sub Worksheet_Change(ByVal Target As Range)

If Trim(Target) = "" Then
If Sheets("Copia").Range(Target.Address).HasFormula = True Then
Target.Formula = Sheets("Copia").Range(Target.Address).Formula
End If
End If

End Sub

[/CODE]

Esta macro restaurará la fórmula de cualquier celda al borrarla.

Saludos a ambos dos.

PD. No me doy al "Me gusta" porqué no puedo, que si no,......jajaja

Posted

Nada, nada, Macro........muy complicado........la mía es más sencilla........recuerdas?.......jejejeje

Cuídate, maestro........y a ver si me dices como se puede contactar contigo directamente, porque no puedo mandarte mensajes privados.....o me tienes en la lista negra ó es que tienes el buzón a tope siempre!!!......jejeje

Chao....

Cacatua.......no hay color........él sabe mucho más......pero la mía es más fácil en este caso......:witless:

Tese

Posted

Ambos dos:

Bueno, bueno,... menos lobos Caperucita,...., mi solución vale para cualquier celda y cualquier fórmula, y además ambas macros tiene el mismo número de líneas.

Saludos a todos menos a dos, ¡Ale! ahí queda eso.

Posted

Disiento totalmente, querido maestro........

Cuando tú haces la copia, cualquier celda posterior de la columna A en la que sea necesario incluir la fórmula no se tendrá en cuenta.......y con la mía sí........aunque solo sea por eso, se adapta mejor a la petición.....jejeje

Y en cuanto a mbenitesh........no te asustes con las proclamas del maestro.......que es buena gente......jejeje.....no hace falta que le hagas la pelota....jejej

Chao.......

Y por cierto, cacatua ha dicho algo?........jejeje

Tese

Posted

He estado probando su programación a la ligera y me funcionó... y ahora que recuerdo tu me ayudaste en un tema también... se te agradece Tese1969 jejej

Disiento totalmente, querido maestro........

Cuando tú haces la copia, cualquier celda posterior de la columna A en la que sea necesario incluir la fórmula no se tendrá en cuenta.......y con la mía sí........aunque solo sea por eso, se adapta mejor a la petición.....jejeje

Y en cuanto a mbenitesh........no te asustes con las proclamas del maestro.......que es buena gente......jejeje.....no hace falta que le hagas la pelota....jejej

Chao.......

Y por cierto, cacatua ha dicho algo?........jejeje

Tese

*Ivette :o

Posted

Amigo Tese,

Dos consulta más:

1) Esta macro tengo que aplicarla sólo a 2 columnas de la hoja que estoy utilizando en realidad: H17:H36 e I17:I36. ¿Cómo debería ser la macro?

2) Esta hoja ya tiene otra macro por otro tema. ¿Cómo hago para agregar esta nueva macro a la hoja, siendo que ya tengo otra funcionando?

Posted

Buenas, cacatua

Te refieres a que tus columnas "H" e "I" hacen las veces de las "A" y "B" del ejemplo?

En cuanto al segundo punto, te diré que depende mucho de lo que para tí signifique "otra macro" en esta hoja.....

Me explico: yo lo que he creado es un código de Evento (Worksheet_Change), que se dispara/ejecuta cuando se produce un cambio en la hoja donde se encuentra incluido......en este caso el eliminar el valor de alguna celda de la columna "A".

No se trata de un módulo asociado al archivo, sino que es código directamente incluido a través del editor de VBA (Alt+F11) en la Hoja1.

Si te parece puedes incluir un nuevo archivo ejemplo "con datos ficticios", pero con la estructura real, para poder ver mejor a qué te estás refiriendo con eso.........

Por cierto, al final no has comentado si te había servido ó era eso lo que esperabas.....

Un saludo,

Tese

Posted

Estimado Tese,

Tu solución me pareció muy buena, es la que utilizaré. Pero me da error en algunos casos que describo a continuación:

Cada vez que en la hoja borro más de una celda a la vez (contenga o no fórmulas) o elimino alguna fila, aparece un cartel de error del Microsoft Visual Basic que dice:

Se ha producido el error '13' en tiempo de ejecución

No coinciden los tipos

Cabe aclarar (por si tuviese algo que ver) que en la misma hoja tengo otra macro puesta, destinada a poder agrupar y/o desagrupar cuando la hoja está protegida. Dicha macro está alojada en el ThisWorkbook, y es la siguiente:

Private Sub Workbook_Open()

With Worksheets("Hoja1")

.EnableOutlining = True

.Protect Password:="", _

Contents:=True, UserInterfaceOnly:=True

End With

End Sub

Saludos,

- - - - - Mensaje combinado - - - - -

Estimado Tese,

Utilicé la función que me pasastes, me parece correcta, pero sucede que cuando selecciono más de una celda a la vez para borrar la información que tienen (sin importar si las celdas seleccionadas contengan fórmulas, texto, o estén vacías); o si quisiese eliminar o agregar una fila/columna, aparece el siguiente error de Microsoft Visual Basic:

Se ha producido el error '13' en tiempo de ejecución:

No coinciden los tipos

Cabe destacar que la hoja también tiene otra macro (por si tuviese algo que ver) destinada a poder agrupar/desagrupar con la hoja protegida. Dicha macro está puesta en ThisWorkbook, y es la siguiente:

Private Sub Workbook_Open()

With Worksheets("Costeo")

.EnableOutlining = True

.Protect Password:="", _

Contents:=True, UserInterfaceOnly:=True

End With

End Sub

¿Podrás ayudarme?

Posted

Buenas, cacatua

Con la línea extra que incluyo a continuación teóricamente desaparece el problema de cuando seleccionas más de una celda...ahora bien, eso supone que si borras alguna de las celdas de la columna "A" junto con otras, ya sean de la misma columna ó fila, no incluirá la "posible" fórmula que pedías en un primer momento.....


Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR=#0000ff]If Target.Count>1 Then Exit Sub[/COLOR]
If Target.Column = 1 And Target.Row > 1 And Target.Value = "" Then
Target.FormulaR1C1 = "=IF(RC[1]=1,""SI"",0)"
End If
End Sub
[/CODE]

Prueba a ver si ahora va mejor.....

Un saludo,

Tese

Posted

Tese querido,

Me parece que lo mejor es terminar utilizando:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Row > 1 And Target.Value = "" Then

Target.FormulaR1C1 = "=IF(RC[1]=1,""SI"",0)"

End If

End Sub

Simplemente te pido me ayudes con lo siguiente: en vez de que la macro aplique a la columna A, debe aplicar a las columnas "H" e "I". ¿Cómo debería ser entonces la macro?

Posted

¿Te refieres a que la fórmula iría en H y toma como referencia el valor de I?

Como A y B en tu ejemplo.....me refiero....

Un saludo,

Tese

Posted

No, sino que tanto en H como en I hay celdas con fórmulas (que son las que no se deben borrar), las cuales toman como referencia valores de otros lugares de la hoja

Posted

¿Pero, como quieres incluir una fórmula sin saber cuáles son los valores de referencia?...recuerda que en el código que creé la fórmula la incluíamos con la referencia.....

Un saludo,

Tese

Posted

Tese,

La idea es que la macro se aplique a cualquier fórmula que yo ingrese en cualquier celda de la columna H o en cualquier celda de la columna I. La fórmula inicial (y luego son todas iguales, sólo que cambian el número de celda) están en H11 e I11

- - - - - Mensaje combinado - - - - -

Don Macro Antonio,

Probé su solución y me resultó. Me gusta porque me sirvió para toda la hoja. Tendría que solucionarle sólo una cosa. Cuando selecciono más de una celda a la vez para borrar su contenido (y que de esta manera vuelva a restaurarse la fórmula) me salta el siguiente error:

Se ha producido el error '13' en tiempo de ejecución

No coinciden los tipos

¿Podrá solucionarse? Asimismo planteo -si se pudiese- un nuevo desafío, que la fórmula se restaure no sólo si borro el contenido de la celda, sino también cuando agrego a mano el número 0 (cero).

Abrazo,

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy