Delen decimal (long)

Status
Niet open voor verdere reacties.

Myclos81

Gebruiker
Lid geworden
17 nov 2007
Berichten
157
Beste,

2 vraagjes.

1. Wat is de kleinere variabele voor Long ? Float en short vind ik niet in VBA ?
2. Waarom lukt onderstaande code niet ? VTE geeft 0 :(

Code:
Private Function BerekenVte(PrestatiesDec)
    Dim VTE As Long
    Dim dummy As Long
    Dim deling As Long
    
    deling = CLng(38)
    
    dummy = CLng(PrestatiesDec)
    VTE = CLng(dummy) / CLng(deling)
End Function

PrestatiesDec is wel string (19,00) maar de conversie gebeurt wel.

Dank.
M81
 
1 Geen idee: integer, double?
2 BerekenVte = CLng(dummy) / CLng(deling) moet de laatste regel zijn.
 
Ik weet niet hoe het in VBA is, maar een functie moet toch gewoon een waarde retourneren?
 
Inderdaad, heel juist en in VBA wordt de waarde geretourneerd door de functienaam die waarde te geven.

Dat is ook de reden waarom jouw functie eigenlijk zo moest beginnen:

Private Function BerekenVte(PrestatiesDec as long) as long
 
Private of niet heeft te maken met de plaats waar je de functie wilt gebruiken. Wil je hem in Excel in een cel kunnen gebruiken, dan moet hij niet Private zijn.
De functie doet het altijd wel, al ontbreekt het toewijzen van de uitkomst.
Eigenlijk zou de code er zo uit moeten zien:

Code:
Private Function BerekenVte(PrestatiesDec)
Dim VTE As Long, dummy As Long, deling As Long
    deling = CLng(38)
    dummy = CLng(PrestatiesDec)
    BerekenVte = CLng(dummy) / CLng(deling)
End Function

En je test 'm zo:
Code:
Sub testje()
Dim tmp
tmp = InputBox("", "", BerekenVte(120))
End Sub

De uitkomst hiervan is 3,15789473684211. Weliswaar wordt er (eigenlijk volkomen overbodig) een conversie gedaan op de getallen, de uitkomst wordt niet geconverteerd. En dus levert de berekening het volledige getal op.
Wil je een geheel getal retour, dan moet je dus de uitkomst manipuleren. Dat kan op twee manieren:
Door in de eerste functie één regel aan te passen:
Code:
    BerekenVte = CLng(CLng(dummy) / CLng(deling))
Of door de functie zelf aan te passen:
Code:
Private Function BerekenVte(PrestatiesDec) As Long
Dim VTE As Long, dummy As Long, deling As Long
    deling = CLng(38)
    dummy = CLng(PrestatiesDec)
    BerekenVte = CLng(dummy) / CLng(deling)
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan