Automatisch laten berekenen van waarden

Status
Niet open voor verdere reacties.

JWvdVeer

Gebruiker
Lid geworden
25 mrt 2010
Berichten
5
Goedendag allen,

Ik heb een formulier met zo'n vier subformulieren die allemaal gelinkt zijn aan dezelfde tabel. Één van deze subformulieren berekent automatisch twee veldwaarden op basis van de ingevoerde informatie. Dit gebeurt met de volgende code:
Code:
Public Sub AutoMathFields()
    Dim BDate As Date, IDate As Date
    BDate = Me.[Birth Date].Value
    IDate = Me.Inclusion_Date.Value
    
    Me.Inclusion_Age.Value = IIf((Not IsNull(IDate) And Not IsNull(BDate)), DateDiff("yyyy", BDate, IDate) - ((Month(BDate) < Month(IDate)) Or ((Month(BDate) = Month(IDate)) And (Day(BDate) <= Day(IDate)))), "")
    Me.BMI__kg_m_2_.Value = IIf((Not IsNull(Me.Weight__kg_.Value) And Not IsNull(Me.Height__cm_.Value)), (Me.Weight__kg_ / (Me.Height__cm_ / 100) ^ 2), "")
End Sub

Deze Sub wordt aangeroepen bij het laden van het formulier en bij het bewerken van één van de parametervelden (`Birth Date`, `Inclusion Date`, `Weight (kg)` of `Height (cm)`). Het probleem is echter dat wanneer dit resulteert in een verandering, dat ik standaard een schrijfconflict krijg wanneer ik naar een andere subformulier ga of het hoofdformulier probeer af te sluiten.

Zijn er mensen die een idee hebben hoe dit komt en hoe ik dit kan voorkomen?

Paar van mijn eigen probeersels:
- Het is zeker dat het van de bovenstaande code afkomstig is, wanneer ik dit weghaal is namelijk het hele probleem over.
- Het geprobeerd om RunCommand acCmdSaveRecord bij unloaden of verliezen van focus van het formulier aan te roepen.
- Me.Dirty op False gezet.

Op dit moment ben ik even helemaal blank, gezien ik totaal niet het minste idee heb hoe dit probleem ontstaat.

Met vriendelijke groet,
Jan Willem
 
Zou het hiermee opgelost zijn ?
Me.Inclusion_Age.Value = IIf((Not IsNull(IDate) And Not IsNull(BDate)), DateDiff("yyyy", BDate, IDate) - ((Month(BDate) < Month(IDate)) Or ((Month(BDate) = Month(IDate)) And (Day(BDate) <= Day(IDate)))), 0)
Me.BMI__kg_m_2_.Value = IIf((Not IsNull(Me.Weight__kg_.Value) And Not IsNull(Me.Height__cm_.Value)), (Me.Weight__kg_ / (Me.Height__cm_ / 100) ^ 2), 0)
End Sub
 
Nee, daarmee is het niet opgelost. Daarnaast is het de bedoeling dat het dan NULL/Nothing wordt. En daar doet ie helemaal moeilijk over.
 
Dan ben ik benieuwd naar:

Me.Inclusion_Age.Value =""
Me.BMI__kg_m_2_.Value =""

' If IsNull(IDate) * IsNull(BDate) >0 then Me.Inclusion_Age.Value = DateDiff("yyyy", BDate, IDate) + 1*(DateAdd("yyyy",DateDiff("yyyy", BDate, IDate) )>IDate)

' If IsNull(Me.Weight__kg_.Value) * IsNull(Me.Height__cm_.Value)>0 then Me.BMI__kg_m_2_.Value = Me.Weight__kg_ / (Me.Height__cm_ / 100) ^ 2
 
Dat wordt automatisch getransformeerd naar `NULL` in SQL. Als je probeert Nothing toe te wijzen, gaat VBA problemen geven.

En het probleem treedt overigens niet enkel op wanneer er "" aan toegekend wordt.
 
Werkt ook niet, hetzelfde probleem blijft met die oplossing bestaan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan