Niet ingevuld toch berekenen VBA

Status
Niet open voor verdere reacties.

Ronaldxx

Gebruiker
Lid geworden
13 dec 2009
Berichten
198
Even een vraagje.

Ik kan 4 cijfers invullen
Kostencijfer : K
Materiaalcijfer : M
Uitvoeringscijfer : U
Ervaringscijfer: E

Van deze getallen wil ik een gemiddelde, nu is het probleem dat E pas achteraf na een project kan worden ingevuld (ervaring).

Ik wil hem toch berekenen zonder de E ik had de volgende code bedacht maar deze klopt niet helemaal.

Code:
Dim K As Integer
Dim M As Integer
Dim E As Integer
Dim U As Integer
Dim totaal As Integer
Dim delen As Integer

K = Me.Kostencijfer
M = Me.Materiaalcijfer
U = Me.Uitvoeringcijfer
E = Me.Ervaringcijfer

If E = IsNull Then delen = 3
Else: delen = 4

totaal = (K + M + U + E) / delen

Me.TxtTotaal = totaal
 
Niet goed:

Code:
If E = IsNull Then delen = 3

Wel goed:

Code:
if len(nz(E,"")) = 0 then
   delen = 3
else
   delen = 4
endif

De waarde Null is nergens gelijk aan. Als je de waarde uit een textbox wil vergelijken met Null dan gebruik je:

Code:
If me.txtWaarde Is Null then
   ...
of
Code:
If IsNull(me.txtWaarde) then
   ...
Enjoy!
 
Das logisch bedankt !

Nu loop ik tegen een ander probleem aan.
Code:
Dim K As Integer
Dim M As Integer
Dim U As Integer
Dim E As Integer
Dim totaal As Integer
Dim delen As Integer

K = Me.Kostencijfer
M = Me.Materiaalcijfer
U = Me.Uitvoeringcijfer
E = Me.Ervaringcijfer

If Len(Nz(E, "")) = 0 Then
   delen = 3
Else
   delen = 4
End If

totaal = (K + M + U + E) / delen

Me.txttotaal = totaal
End Sub

Als ik dus 3 cijfers in geef en niks voor de E dan krijg ik de melding dat dit niet kan en dan wordt E = Me.Ervaringcijfer geel.
Ongeldig gebruik van null.
 
Het probleem waar je nu tegen aan loopt heeft te maken met het feit dat je geen NULL waarde in een INTEGER variabele kwijt kan. Dat kan alleen bij een variabele van het type VARIANT. Dat kan je op verschillende manieren oplossen.
Code:
Dim K As Integer
Dim M As Integer
Dim U As Integer
Dim E As Integer
Dim totaal As Integer
Dim delen As Integer

K = Nz(Me.Kostencijfer,0)
M = Nz(Me.Materiaalcijfer,0)
U = Nz(Me.Uitvoeringcijfer,0)
E = Nz(Me.Ervaringcijfer,0)

If E > 0 Then
   delen = 3
Else
   delen = 4
End If

totaal = (K + M + U + E) / delen

Me.txttotaal = totaal
Dit is een mogelijke oplossing. Maar nu mag je geen 0 meer opgeven in de input want die betekent nu niets meer...

Share and Enjoy!
 
Dank u !

Is dit ook mogelijk, ik zit zo is ff te rommelen.

Code:
Private Sub Report_Load()
Dim K As Integer
Dim M As Integer
Dim U As Integer
Dim E As Integer
Dim totaal As Integer
Dim delen As Integer

K = Nz(Me.Kostencijfer, 0)
M = Nz(Me.Materiaalcijfer, 0)
U = Nz(Me.Uitvoeringcijfer, 0)
E = Nz(Me.Ervaringcijfer, 0)

delen = 4

If K = 0 Then delen -1 Else delen -0
If M = 0 Then delen -1 Else delen -0
If U = 0 Then delen -1 Else delen -0
If E = 0 Then delen -1 Else delen -0

totaal = (K + M + U + E) / delen

Me.txttotaal = totaal
End Sub

Dit werkt niet maar zo iets :P

Bedankt he ! super
 
Rommelen is goed, daar leer je weer van.
Ik zou er dan zoiets van maken:

Code:
Private Sub Report_Load()
Dim K As Integer
Dim M As Integer
Dim U As Integer
Dim E As Integer
Dim gemiddeld As double
Dim delen As Integer

K = Nz(Me.Kostencijfer, 0)
M = Nz(Me.Materiaalcijfer, 0)
U = Nz(Me.Uitvoeringcijfer, 0)
E = Nz(Me.Ervaringcijfer, 0)

delen = 0

If K <> 0 Then delen = delen + 1
If M <> 0 Then delen = delen + 1
If U <> 0 Then delen = delen + 1
If E <> 0 Then delen = delen + 1

gemiddeld = (K + M + U + E) / delen

Me.txttotaal = format(gemiddeld, "##,##")
End Sub
 
Super ik denk dat die het nu goed doet.

Even een paar vraagjes zomaar voor de duidelijkheid:

<> staat voor kleiner of groter is dit echt nodig ? Ik gebruik alleen positieve getallen
Double waar staat dit voor ? Is dit een afronding of ?

En nog 1 vraag
Format(gemiddeld, '##,##') hij rond de uitkomst af is het mogelijk om bijvoorbeeld 7.5 of 7.8 in te stellen ?

Super bedankt

Gr, Ronald
 
<> staat voor kleiner of groter is dit echt nodig ? Ik gebruik alleen positieve getallen

Onjuist.
<> staat voor ongelijk aan.

Double waar staat dit voor ? Is dit een afronding of ?

Double is een gegevenstype.
Open je code, selecteer het woord Double en klik op F1.
Nu opent VBA Help, met een beschrijving van Double.

En nog 1 vraag
Format(gemiddeld, '##,##') hij rond de uitkomst af is het mogelijk om bijvoorbeeld 7.5 of 7.8 in te stellen ?

Pas daarvoor je code aan als volgt:

Code:
Dim K As Double
Dim M As Double
Dim U As Double
Dim E As Double
Dim gemiddeld As Double
Dim delen As Integer

K = Nz(Me.Kostencijfer, 0)
M = Nz(Me.Materiaalcijfer, 0)
U = Nz(Me.Uitvoeringcijfer, 0)
E = Nz(Me.Ervaringcijfer, 0)

If K <> 0 Then delen = delen + 1
If M <> 0 Then delen = delen + 1
If U <> 0 Then delen = delen + 1
If E <> 0 Then delen = delen + 1

gemiddeld = (K + M + U + E) / delen

Me.txttotaal = FormatNumber(gemiddeld, 1)

Tardis
 
De allerlaatste vraag haha dit werkt perfect trouwens !

Ik heb een doorlopend rapport, dus alle records worden getoond.
De code heb ik bij het laden event geplakt, nu is het probleem dat hij alleen voor het eerste record het gemiddelde berekend.
Dus niet voor het record hieronder, moet de aanpak daarvoor erg veranderd worden ?

Mvg,

Ro
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan