¿Cómo hacer que al modificar una celda recalcule las celdas con una fórmula hecha en VBScript?

Que tal Fer:
Me surgió otra duda... Estoy tratando de programar lo siguiente. Necesitaría que cuando el usuario modifica el contenido de la celda D3 de la hoja PLANILLA, recalcule las celdas que contienen como fórmula una función hecha por mi en VBScript. ¿Tienes idea como tengo que hacer?. Necesitaría, creo, activar los eventos en Excel... ¿Cómo?
GRACIAS
ARIEL
1

1 respuesta

Respuesta
1
En realidad solo necesitas definir al principio de tu función, lo siguiente:
Application.Volatile = False
Toda vez que, una función volátil debe volver a calcularse siempre que se efectúe un cálculo en cualquier celda de la hoja de cálculo. Este es el estado natural de una función.
Mientras que una función no volátil se vuelve a calcular sólo cuando cambian las variables de entrada.
Y creo que este es tu caso.
Esto debería resolver tu problema.
Pruébalo y comentame.
Un abrazo!
Fernando
Fer, lo probé y no anduvo, no hubo ningún cambio. Fíjate si se te ocurre otra cosa... Gracias
ARIEL
Debería funcionar o probar con:
Application. Volatile
Pero si aún así no funcionara, coloca este código en la página de tu hoja "PLANILLA"
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Static ValAnt
If ValAnt <> Target.Value And Target.Address(False, False) = "D3" Then
ActiveSheet.Calculate
'ActiveSheet.UsedRange.Columns("A:C").Calculate Activa esta línea (quita el apóstrofe inicial) para que calcule las columnas A a C del rango usado
'Calculate ' Activa esta línea (quita el apóstrofe inicial) para que calcule todo el libro
ValAnt = Target.Value
End If
End Sub
Esta rutina controla que la celda modificada fuese la D3 de esa hoja y si el valor es distinto al que tenía.
Si así fuera, recalcula.
Verás que hay distintas alternativas de cálculo, habilita (quitando el apostrofe inicial) aquella que te convenga más. A las otras dos, bórralas o anúlalas (con un apostrofe inicial)
Hasta donde probé funciona OK, pero coméntame.
Un gran abrazo!
Fernando
Fer:
Te sigo agredeciendo por la atención que me prestas. Mira, probé el módulo que me mandaste. Yo modifico el contenido de la celda D3... me aparece el mensaje "Calculando celdas" llega hasta el 100% y ahí entra al modulo que me hiciste.. Entra al if, hace la acción Calculate, pero no recalcula las celdas donde se encuentra la dichosa macro BUSCO que yo armé. Ahora, si voy a la fórmula, borro que se yo... el paréntesis de cierre y lo vuelvo a poner, si me cambia el resultado por el que tendría que ir, o sea, ¿lo recalcula... Tienes idea que puede ser?
GRACIAS
ARIEL
PD: si necesitas saber algún dato de la planilla preguntame, yo estoy en linea hasta las 17:00, te respondo enseguida
Por lo que me dices, parece que tienes configurada tu planilla para recalculo automático. Por lo cual tu planilla debería recalcular todas las fórmulas. A partir de aquí se abren tres alternativas:
1.- Revisar paso a paso tu función para ver si tiene algún punto de conflicto. Para esto, tal vez lo sepas, vé al editor de Visual basic y, donde esté la función, presiona F8 (no pasará nada... todavía). Vuelve a tu hoja, edita la celda donde tengas una fórmula de la función y presiona Enter. Se activará el Editor iluminando la primer línea. Luego, presionando F8, revisa las restantes (observando con qué se cargan las variables).
2.- Existe un "bug" reportado de MS Excel (Articulo Q154134, en la base de conocimiento de MS Excel: en http://support.microsoft.com/default.aspx?scid=kb;en-us;Q154134) que provoca lo mismo aún con fórmulas standard.
(Sé de un artículo en inglés que existía en http://www.zdnet.com/zdhelp/nonzd/excelbug.html)
3.- Usar un código que provoque el recalculo de esas celdas como cuando lo editas a mano.
Ingresa, en el código que te mandé, esta instrucción, luego de haber seleccionado las celdas con tu función:
Selection.Replace "=", "="
Prueba algo de esto (o todo) y dime.
Un abrazo!
Fernando
Fer!:
Cuando termine de enviar el mail pidiéndote ayuda, probé la sentencia (que no había probado aun) Application. Volatil sin el FALSE y anduvo. Te agradezco mucho y te tendré en cuenta. Gracias de nuevo... Un abrazo
ARIEL

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas