Acumulador recursivo

09/06/2006 - 20:09 por Hernandez, Roberto | Informe spam
Saludos al foro:
Quisiera preguntar, aprovechandome de su sabiduría, si existe alguna forma
de aprovechar el evento Onchange de una hoja para crear una celda que
acumule el valor tecleado en si misma, digamos, 'recursivamente'.?
Es decir que si la celda A1 contiene un 5, y yo tecleo en A1 otro 5, la
celda muestre 10.

Agradezco de antemano su atención al presente
 

Leer las respuestas

#1 Vinchenzo vinç
09/06/2006 - 21:08 | Informe spam
"Hernandez, Roberto" escribió en el mensaje news:
Saludos al foro:
Quisiera preguntar, aprovechandome de su sabiduría, si existe alguna forma de aprovechar el evento Onchange de una hoja para crear
una celda que acumule el valor tecleado en si misma, digamos, 'recursivamente'.?
Es decir que si la celda A1 contiene un 5, y yo tecleo en A1 otro 5, la celda muestre 10.




Hola Roberto,

desconozco si Excel posee de forma intrínseca alguna opción, método, funcionalidad, o lo que fuere.
La forma que se me ocurre, es interceptando el cambio de valor en la celda, del evento 'Worksheet_Change' de la hoja en
cuestión.
Aunque no me convence mucho. Se basa en, primero identificar si está cambiando la celda que quieres. Almacenar el valor actual
(si es numérico), ejecutar un 'Deshacer' en la aplicación, y sumar el valor almacenado con el valor actual (es decir, el valor
anterior).

'***********
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Cells(1, 1).Address Then
Static blnEsUndo As Boolean
Static blnEsCambio As Boolean
Dim dblValue As Double

If blnEsUndo Or blnEsCambio Then Exit Sub

If Not IsNumeric(Target.Value) Then
Application.Undo
Exit Sub
End If
dblValue = CDbl(Target.Value)
blnEsUndo = True
Application.Undo
blnEsUndo = False
blnEsCambio = True
If Not IsNumeric(Target.Value) Then
Target.Value = CDbl(dblValue)
Else
Target.Value = Target.Value + CDbl(dblValue)
End If
blnEsCambio = False
End If
End Sub
'***********

Presupone que la celda 'acumuladora' es la "A1", cada vez que introduzcas un valor numérico, se le sumará. En caso necesario,
para decrementarlo, basta con introducir un valor negativo (evidente, suma la resta), o puedes 'bloquear' la introducción de valores
negativos en el mismo procedimiento (If Target.Value < 0 Exit Sub).

Y, tal vez necesite alguna depuración, no he hecho un test exhaustivo...


Saludos
( ! ) Respuestas precedentes en Google:
http://tinyurl.com/rkce5
( i ) Temperancia en el foro:
http://tinyurl.com/mawnn

Preguntas similares