Simpele berekening in vba

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
947
Dag Helpmijers,

Ik heb een in mijn beleving simpele vraag, echter werkt de code niet.

Het is de bedoeling dat wanneer ik op een regel sta deze een berekening doet en de uitkomst in actieve regel cel O plaatst.

ActiveCell.EntireRow.Range("o1") = ActiveCell.EntireRow.Range("c1") * (ActiveCell.EntireRow.Range("l1") - (ActiveCell.EntireRow.Range("m1") * 10))

Wat doe ik fout?

Alvast heel hartelijk bedankt.

M.vr.gr.
Robert
 
Waarom die je dat niet met een simpele standaard Excel functie in O1?
=C1*L1-(M1*10)

Wat betreft de VBA code kan je dit overal weg laten:
ActiveCell.EntireRow.
 
Laatst bewerkt:
Dag Ed,

Ik wil geen formule in een cel want wanneer deze per ongeluk wordt verwijderd volgt er geen berekening.

m.vr.gr.
Robert
 
Dan kan je m'n andere suggestie proberen. Of een voorbeeld documentje plaatsen.
 
voorbeeld bestand als bijlage

Bekijk bijlage Verkoopfactuur (3).zip

Hierbij doe ik jou het bestand toekomen. Wanneer je deze opstart geeft deze al een foutmelding.

Het is de bedoeling dat wanneer een artikel op de factuur wordt gezet deze het bedrag ex. btw uitrekent. Bovendien moet de berekening opnieuw plaatsvinden wanneer er een wijziging in de regel plaatsvindt, bijv een ander aantal of ander prijs.

Alvast bedankt.

Robert
 
Ik kan niks testen wegen ontbrekende externe documenten, maar schrijf dat OnChange event eerst eens zo:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim box As Double
    
    If Intersect(Target, Range("P22:O56")) Is Nothing Then Exit Sub
    
    Application.EnableEvents = False
    If Range("P1") = "" And Range("N1") = "marge" Then
        box = Application.InputBox("Vermeld hier het AANKOOPBEDRAG van het verkochte artikel.", , , , , , , 1)
        If box > 0 Then Range("P1") = box * Range("C1")
    End If
 
    'aantal * stukprijs - korting
    If Range("N1") <> "" Then Range("O1") = (Range("C1") * (Range("L1") - (Range("M 1") * 10)))
    Application.EnableEvents = True
End Sub
 
De code doet het prima, maar alleen als er in de Range("P22:O56") iets wordt gewijzigd.
Zoals ik al zei kan ik het niet testren dus je moet zelf even bepalen in welke range er een wijziging moet zijn om de code te laten draaien.
Die range pas je dan aan in de regel: If Intersect(Target, Range("P22:O56")) Is Nothing Then Exit Sub
 
Ik kan nog steeds geen artikel ophalen wegens een niet aanwezig extern bestand.
De code doet het prima maar volgens mij moet je die controleregel wijzigen in dit:
If Intersect(Target, Range("P22:O56"))

De andere ranges in de code moet je ook even goed nazien of het wel de juiste zijn.
 
Ik haal het niet uit een bestand maar voer de gegevens met de hand in.

Dat ophalen vanuit het voorraadprogramma wordt mijn volgende uitdaging. :rolleyes:
 
Test het maar eens.
Volgens mij moet er nog wel het een en ander veranderd worden aan de code, maar dat vernemen we dan wel weer.
Als je iets in kolom D invult gaat de code in werking.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim box As Double
    
    If Not Intersect(Target, Columns(4)) Is Nothing Then
    
    Application.EnableEvents = False
    If Range("L" & Target.Row) = "" Or Range("P" & Target.Row) = "" And Range("N" & Target.Row) = "marge" Then
        box = Application.InputBox("Vermeld hier het AANKOOPBEDRAG van het verkochte artikel.", , , , , , , 1)
        If box > 0 Then Range("P" & Target.Row) = box * Range("C" & Target.Row)
    End If
 
    'aantal * stukprijs - korting
    If Range("N" & Target.Row) <> "" Then Range("O" & Target.Row) = (Range("C" & Target.Row) * (Range("L" & Target.Row) - (Range("M" & Target.Row) * 10)))
    Application.EnableEvents = True
 End If
End Sub
 
Hallo Harry,

Ik kom nu al een heel stuk in de buurt, echter wanneer je variabele verandert (bijv. kortingspercentage) wordt het totaalbedrag niet aangepast.

Alvast heel erg bedankt.

M.vr.gr.
Robert
 
Verander eens, dan zien we wel weer.
Code:
 If Not Intersect(Target, Range("C22:N56")) Is Nothing Then
 
Ik bedenk me net dat de code alleen van toepassing is binnen een range van C22 : O56. Daarbuiten dient de code niet gebruikt te worden.
 
Dan maak je van de N een O in mijn vorig bericht.
 
Toeval

Heren heel hartelijk bedankt voor jullie inbreng. Mijn laatste vraag is hiermee zelfs ook beantwoord.

Nog hele fijne kerstdagen en heb ontzettend veel waardering voor jullie om mij tijdens de feestdagen van dienst te zijn.

M.vr.gr.
Robert
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan