modificar fórmula desde vba

Samuel Cano

Board Regular
Joined
Jun 24, 2002
Messages
62
Saludos a todos, explico mi asunto:

Inicio con una celda vacía, luego mediante un proceso coloco por ejemplo 100, lo que pido por favor, es modificar mediante vba la fórmula agregando cantidades que se sumen o resten, es decir: la celda que tenía 100 si le resto 25, deje la fórmula como '= 100 -25' y si resto otros 10 la fórmula sea '= 100 -25 -10' .. ojalá me explique..

En mis intentos, al modificar la fórmula anterior, me la deja como '= 75 -10' es decir ejecuta la primera operación y solo agrega el nuevo elemento cuando necesito conservar toda la historia de la fórmula..

Mis últimos intentos generan un error 1004.. y ya me emboté. No sé por dónde resolverlo.

Por lo anterior, agradezco cualquier ayuda, cualquier idea. Muy amables. :)
 

DanteAmor

Well-known Member
Joined
Dec 3, 2018
Messages
7,711
Office Version
2007
Platform
Windows
Pon el siguiente código en los eventos de la hoja.
(Presiona click derecho sobre la pestaña de la hoja, en el menú selecciona ver código, en el panel pega el código)

Funciona de la siguiente manera. Si escribes un valor en la celda B2 la fórmula suma en la celda D2 de manera automática, si escribes en la celda C2 la fórmula resta.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    
    If Not Intersect(Target, Range("B2:C2")) Is Nothing Then
        If Target.Address(False, False) = "B2" Then sig = "+" Else sig = "-"
        If Range("D2").Value = "" Then
            Range("D2").Formula = "=" & Target.Value
        Else
            Range("D2").Formula = Range("D2").Formula & sig & Target.Value
        End If
    End If
End Sub
 

Samuel Cano

Board Regular
Joined
Jun 24, 2002
Messages
62
DanteAmor, muchísimas gracias por ayudarme.

Desesperado se me ocurrió concatenar la propiedad .Formula de las celdas ORIGEN y DESTINO y conseguí armar un resultado funcional que al menos, no genera error con números negativos; el código es rudimentario donde está limitado a negativos pues tiene el signo en el código y, estaba por buscar ampliarlo para positivos..

Es ahí es donde entras en escena y te agradezco nuevamente, porque el código que me compartes me resuelve que sean + ó -, sólo necesito estudiarlo para adaptarlo.


Dejo fragmento del código que hice, con la esperanza que aún con sus limitaciones, sirva a alguien más:

' La siguiente variable recibe el valor a sumar o restar (la celda destino que puede estar vacía o tener un valor previo)

importeADJ = Cells(filaOrig, "I").Formula

' si destino tiene fórmula
If Cells(filaEmprFecha, "G").HasFormula Then

' omite SIGNO de igual (=)
Cells(filaEmprFecha, "G").Formula = Cells(filaEmprFecha, "G").Formula & " -" & importeADJ
Else

' pone SIGNO de igual (=)
Cells(filaEmprFecha, "G").Formula = "= " & Cells(filaEmprFecha, "G").Formula & " -" & importeADJ

End If

Abrazo desde la CDMX
 

Samuel Cano

Board Regular
Joined
Jun 24, 2002
Messages
62
..y me disculpo por no haber sabido incluir el código para que se viera como el tuyo. :(
 

DanteAmor

Well-known Member
Joined
Dec 3, 2018
Messages
7,711
Office Version
2007
Platform
Windows
DanteAmor, muchísimas gracias por ayudarme.

Desesperado se me ocurrió concatenar la propiedad .Formula de las celdas ORIGEN y DESTINO y conseguí armar un resultado funcional que al menos, no genera error con números negativos; el código es rudimentario donde está limitado a negativos pues tiene el signo en el código y, estaba por buscar ampliarlo para positivos..

Es ahí es donde entras en escena y te agradezco nuevamente, porque el código que me compartes me resuelve que sean + ó -, sólo necesito estudiarlo para adaptarlo.


Dejo fragmento del código que hice, con la esperanza que aún con sus limitaciones, sirva a alguien más:

' La siguiente variable recibe el valor a sumar o restar (la celda destino que puede estar vacía o tener un valor previo)

Code:
importeADJ = Cells(filaOrig, "I").Formula

' si destino tiene fórmula
If Cells(filaEmprFecha, "G").HasFormula Then                                                    

    ' omite SIGNO de igual (=)
    Cells(filaEmprFecha, "G").Formula = Cells(filaEmprFecha, "G").Formula & " -" & importeADJ   
Else

    ' pone SIGNO de igual (=)
    Cells(filaEmprFecha, "G").Formula = "= " & Cells(filaEmprFecha, "G").Formula & " -" & importeADJ   

End If
Abrazo desde la CDMX
Mientras te sirve todo código es bienvenido, posteriormente lo podrás ir adecuando.
 

DanteAmor

Well-known Member
Joined
Dec 3, 2018
Messages
7,711
Office Version
2007
Platform
Windows
..y me disculpo por no haber sabido incluir el código para que se viera como el tuyo. :(
No te preocupes, para poner le código, solamente selecciona el icono # (wrap CODE tags around selected text) y pones dentro tu código.

Saludos
 

DanteAmor

Well-known Member
Joined
Dec 3, 2018
Messages
7,711
Office Version
2007
Platform
Windows
Un placer ayudarte. Gracias por los comentarios.
 

Forum statistics

Threads
1,077,780
Messages
5,336,257
Members
399,073
Latest member
fairoos

Some videos you may like

This Week's Hot Topics

Top