• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

probleem eigen functie die vaak doorlopen word.

Status
Niet open voor verdere reacties.

glda19

Gebruiker
Lid geworden
14 jan 2008
Berichten
919
Als ik een stukje vba code test door het stap voor stap te doorlopen dan gebeurt het onderstaande

Telkens ik een waarde via vba toevoeg aan een werkblad waar de onderstaande functie totaal niet opstaat,
of een andere cel kopieer van het werkblad waar de onderstaande functie opstaat, word onderstaande functie steeds uitegevoerd woaarom.
Heeft dit te maken met het automatisch herberekenen

De gebruikte formule op het werkblad ziet er zo uit.
=ALS($H$2=JAAR(NU());Z7-Vermindering_kredietdagen(Z3;W17;W28);"")
Z3 = werkregime, ziektedagen, ontbetaalde_dagen.

Code:
Function Vermindering_kredietdagen(Werkregime As String, ziektedagen As Integer, onbetaalde_dagen As Integer)

'Werkregime = voltijds ,4/5,haltijds' de functie fix rond af naar het heheel getal 99,2 of 99,8 wordt 99
'Verminderingen door Ziektedagen
'----------------------------------------------------------------------
'Bij Voltijd word er 1 kredietdag afgetrokken na 28 kalenderdagen ziekete
'Bij 4/5 word er 1 kredietdag afgetrokken na 33,5 kalenderdagen ziekete
'Bij halftijds word er 1 kredietdaag afgetrokken na 56 kalenderdagen ziekete
If Werkregime = "Voltijds" And ziektedagen >= 1 Then
    Vermindering_Ziekte = Fix(ziektedagen / 28)

ElseIf Werkregime = "4/5" And ziektedagen > 1 Then
    Vermindering_Ziekte = Fix(ziektedagen / 33.5)

ElseIf Werkregime = "Halftijds" And ziektedagen > 1 Then
     Vermindering_Ziekte = Fix(ziektedagen / 56)
End If
'Vermindering door ontbetaaldedagen
'---------------------------------------------------------------------
'Bij Voltijd word er 1/2 kredietdag afgetrokken na 14 kalenderdagen onbetaald
'Bij 4/5 word er 1,/2 kredietdag afgetrokken na 17 kalenderdagen onbetaald
'Bij halftijds word er 1/2  kredietdaag afgetrokken na 28 kalenderdagen onbetaald

If Werkregime = "Voltijds" And onbetaalde_dagen >= 1 Then
    Vermindering_onbetaalde_dagen = Fix(onbetaalde_dagen / 14) / 2

ElseIf Werkregime = "4/5" And onbetaalde_dagen >= 1 Then
     Vermindering_onbetaalde_dagen = Fix(onbetaalde_dagen / 17) / 2

ElseIf Werkregime = "Halftijds" And onbetaalde_dagen >= 1 Then
    Vermindering_onbetaalde_dagen = Fix(onbetaalde_dagen / 28)
Else
    Vermindering_onbetaalde_dagen = onbetaalde_dagen
End If

Vermindering_kredietdagen = Vermindering_Ziekte + Vermindering_onbetaalde_dagen
'Vermindering_kredietdagen = ziektedagen
End Function
 
Laatst bewerkt:
Een function wordt aangeroepen door elke verandering in het werkboek.
Herberekening.
 
M.a.w, verzin een controle of de functie wel of niet moet worden uitgevoerd en zet die controle dan bovenin die functie.
Als het niet nodig blijkt te zijn doe je Exit Function.
 
Dat zal je zelf moeten verzinnen.
Ik ken de condities niet waaronder die functie zijn werk moet doen.
 
Eigenlijk enkel als de waarde in de cel ziekte en werk ongeval is gewijzigd moet ze werken.
Dacht dat er iets bestaat zoals waneer de cel wijzigt het dan enkel laten berekenen
 
Laatst bewerkt:
De herberekening gebeurt omdat je in de formule gebruik maakt van de functie NU, deze herberekent altijd. Je kunt tijdens debuggen zodra je in de functie komt op control+shift+F8 drukken ipv gewoon F8 om Excel de gehele berekening in een keer te laten doen.
 
Maar de functie word ook uitgevoerd als ik uit een andere cel iets kopieer
 
Zoals ik al zei, de functie NU herberekent ALTIJD, ongeacht welke cel er wordt gewijzigd.
 
Of bestaat er een andere beter oplossing om te zorgen dat de waarde van bepaalde cellen enkel in het huidige jaar zichtbaar zijn
 
Nee vandaag() werkt precies hetzelfde als nu()

wat je wel kunt doen is 1 cel kiezen in je werkboek waar de datum van vandaag middels VBA wordt in wordt gezet elke keer als je het werkboek opent.

via de eventmacro Workbook_open die je in de Thisworkbook module zet.

voorbeeldcode:
Code:
Private Sub Workbook_Open()
Worksheets("Blad1").Range("A1").Value = Date
End Sub

Blad1 moet je vervangen door de naam van jou tabblad waar die datum geplaatst moet worden
A1 moet je vervangen door de cel waar jij hem wilt plaatsen.

vervolgens kun je in de formule uit de 1e post de NU() vervangen door de cel verwijzing, ter illustratie gebruik ik nogmaals A1. maar dat moet uiteindelijk dus de celverwijzing zijn voor de cel die jij kiest

Code:
=ALS($H$2=JAAR(A1);Z7-Vermindering_kredietdagen(Z3;W17;W28);"")

Daarmee zou het altijd herberekenen moeten stoppen voor die formule en het ligt (voor de duidelijkheid) dus niet aan de code van je eigen gemaakte functie
 
Laatst bewerkt:
wat ik eigenlijk wil bekomen is dat de waarde in bepaalde cellen enkel zicht baar zijn in het huidige jaar.
De gebruiker kan met een op neer teller het jaar wijzigen. Dus als hij naar een hoger of lager jaar gaat wil ik sommige waarde niet zien.
En wil ik niet dat de fuctie Vermindering_kredietdagen word uitgevoerd
 
@ roeljongman her lees uw eerste zin eens die is niet juist wat werkt het zelfde als vandaag
Nee vandaag() werkt precies hetzelfde als vandaag()

wat je wel kunt doen is 1 cel kiezen in je werkboek waar de datum van vandaag middels VBA wordt in wordt gezet elke keer als je het werkboek opent.

via de eventmacro Workbook_open die je in de Thisworkbook module zet.

voorbeeldcode:
Code:
Private Sub Workbook_Open()
Worksheets("Blad1").Range("A1").Value = Date
End Sub

Blad1 moet je vervangen door de naam van jou tabblad waar die datum geplaatst moet worden
A1 moet je vervangen door de cel waar jij hem wilt plaatsen.

vervolgens kun je in de formule uit de 1e post de NU() vervangen door de cel verwijzing, ter illustratie gebruik ik nogmaals A1. maar dat moet uiteindelijk dus de celverwijzing zijn voor de cel die jij kiest

Code:
=ALS($H$2=JAAR(A1);Z7-Vermindering_kredietdagen(Z3;W17;W28);"")

Daarmee zou het altijd herberekenen moeten stoppen voor die formule en het ligt (voor de duidelijkheid) dus niet aan de code van je eigen gemaakte functie
 
Zet automatisch berekenen uit en als je wilt berekenen druk F9.
Ben je er gemakkelijk vanaf.
 
snap er totaal niks meer van
Maar op het werkblad met naam 2019 en ook op het sjabloon staat eerder vermelde formule
Hoe komt het dat deze regel in vba ook de vermelede functie in post 1 doorloopt. Zou dit komen omdat er op het werklblad de datum functie staat. Maar er staat nergens een verwijzing naar de functie in post 1
Werkladdata=Datablad
WerkbladData.Cells(LaatsteRij, "j").Value = Year(Now()) - 1
 
snap er totaal niks meer van
Maar op het werkblad met naam 2019 en ook op het sjabloon staat eerder vermelde formule
Hoe komt het dat deze regel in vba ook de vermelede functie in post 1 doorloopt. Zou dit komen omdat er op het werklblad de datum functie staat. Maar er staat nergens een verwijzing naar de functie in post 1
Werkladdata=Datablad
WerkbladData.Cells(LaatsteRij, "j").Value = Year(Now()) - 1
 
Om 18:06 snapte je hetzelfde verhaal ook niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan