Formule werkt met cijfers, maar niet bij omschakelen naar variabele

Status
Niet open voor verdere reacties.

Crokydriver

Gebruiker
Lid geworden
7 okt 2017
Berichten
6
Beste

Ik ben geen grote Excel VBA gebruiker, maar heel soms haal ik wel eens iets in mijn hoofd die ik probeer zo praktisch mogelijk te maken voor mezelf.
Ditmaal was ik het beu dat ik mijn overuren op het werk bijna nooit weet en als ik die opvraag het weken duurt voor antwoord dus besloot ik een Excel te maken om die zelf bij te houden en liefst gebruiksvriendelijk.

Na drie dagen programmeren en af en toe eens fora af te schuimen naar een klein probleempje of functie ben ik bijna klaar op 1 detail na die ergens simpel lijkt maar er niet in geraakt.

Hieronder staat een kort stukje van de code waar het probleem hem situeert, waar ik jullie wat info over zal geven om de situatie te begrijpen:
Variabele O staat voor het aantal overuren een bepaalde dag en wordt berekent door (Einduur - Beginuur - Pauze) - Normale Werkuren (in decimalen), waarna iets later een aantal cellen (zie afbeelding) worden ingevuld met die formule in een kalendervorm wat allemaal perfect werkt.

Mijn probleem doet hem voor wanneer ik mijn VBA wil omvormen naar een algemener geheel zodat ook iemand anders door simpel wat cellen een waarde te geven als Beginuur, Pauze en Normale Werkuren deze sheet kan gebruiken. Daarvoor wil ik een Variabel gebruiken voor de werkuren (W) en vanaf dan werkt het niet meer, echter als ik cel O37 een geheel getal geef als waarde of in VBA W=1 bv dan werkt het WEL, vanaf ik een tijd invul die Excel als decimaal ziet werkt het niet meer wat het voorheen wel deed met decimalen. Ook mijn andere cellen staan in tijd en allemaal dezelfde :mm vorm. Vindt iemand het probleem? Het is het laatste zetje voor een afgewerkte sheet :)

mvg
Björn

PS:
De If functie heeft voor het probleem geen belang, dit betreft een cel gekoppeld aan een selectievak of dit een normale werkdag is of een extra werkdag (wel of niet volledig in overuren), daarom worden bij de GO formule geen werkuren afgetrokken omdat die dag geen werkdag is en dus Grote Overuren zijn (beetje logisch naam houden ;-) ), overigens wordt die formule ook correct geplaatst en is het enige verschil de variabele W

Knipsel2.PNG

DIT WERKT:

Code:
Dim O As String
    Dim W As Double
    Dim GO As String
    
    O = "=IF(OR(R[-3]C="""",R[-2]C=""""),""0"",(R[-2]C-R[-3]C-R[-1]C)-0.308333333333333)"
    GO = "=IF(OR(R[-3]C="""",R[-2]C=""""),""0"",(R[-2]C-R[-3]C-R[-1]C))"
    
    If [A39] = "Waar" Then
    [B7] = O
    [B11] = O
    [B15] = O
    [B19] = O
    [B23] = O
    [B27] = O
    Else
    [B7] = GO
    [B11] = GO
    [B15] = GO
    [B19] = GO
    [B23] = GO
    [B27] = GO
    End If

DIT WERKT NIET:
Code:
 Dim O As String
    Dim W As Double
    Dim GO As String
    
   
            'W = Range("O37").Value
            'O = "=IF(OR(R[-3]C="""",R[-2]C=""""),""0"",(R[-2]C-R[-3]C-R[-1]C)-" & W
       
    If [A39] = "Waar" Then
    [B7] = O
    [B11] = O
    [B15] = O
    [B19] = O
    [B23] = O
    [B27] = O
    Else
    [B7] = GO
    [B11] = GO
    [B15] = GO
    [B19] = GO
    [B23] = GO
    [B27] = GO
    End If
 
Laatst bewerkt:
Hoi , Welkom op het forum.:)
Het is een goede gewoonte op een gelijkend vb bestandje te posten. (met wat Jan en Katrien gegevens)
Dan wordt je sneller en gerichter geholpen.
Met plaatjes kunnen we niets aanvangen in een excel forum.
En plaats je code tussen codetags, dit doe je met # toets hier linksboven.
 
In de ochtend al gedronken dotchie? :p
 
Net te weinig (koffie) denk ik.:confused:
Bij deze aangepast.
 
Code:
W = replace(Range("O37").Value, ",", ".")
 O = "=IF(OR(R[-3]C="""",R[-2]C=""""),""0"",(R[-2]C-R[-3]C-R[-1]C)-" & W [COLOR=#ff0000]& ")"[/COLOR]
If [A39] = "Waar" Then [B7,B11,B15,B19,B23,B27] = O
 
Hoi , Welkom op het forum.:)
Het is een goede gewoonte op een gelijkend vb bestandje te posten. (met wat Jan en Katrien gegevens)
Dan wordt je sneller en gerichter geholpen.
Met plaatjes kunnen we niets aanvangen in een excel forum.
En plaats je code tussen codetags, dit doe je met # toets hier linksboven.

Het plaatje was gewoon ter verduidelijking van de overuren die einduur - beginuur - pauze voorstelt in de formule en wat de 'kalender'-vorm beetje is ;-)
en ok de codetags had ik gezocht maar niet direct gevonden, maar pas ik nu aan!
 
Laatst bewerkt:
De bedoeling is dat je een voorbeeld documentje plaatst.
Om codetags te plaatsen gebruik je het # teken in het menu boven de tekst die je aan het intikken bent.
 
Code:
W = replace(Range("O37").Value, ",", ".")
 O = "=IF(OR(R[-3]C="""",R[-2]C=""""),""0"",(R[-2]C-R[-3]C-R[-1]C)-" & W [COLOR=#ff0000]& ")"[/COLOR]
If [A39] = "Waar" Then [B7,B11,B15,B19,B23,B27] = O

Die rode tekens had ik inderdaad weggelaten omdat ik eerst de fout kreeg van een instructie-einde.
Met deze code werkt de formule wel echter krijgt W de verkeerde waarde, op één of andere manier maakt hij er geen 0,xxxxxxxx van maar gewoon xxxxxxx waadoor het getal VEEL te groot is :s. bovendien stuit het dan op hetzelfde probleem als ervoor aangezien het ervoor ook al werkte indien W een geheel getal was een geen decimaal. Alvast bedankt voor de moeite, handig om te weten dak ik cellen die allemaal dezelfde waarde moeten krijgen ook verkort kan noteren toch iets bijgeleerd ;-)

aangezien het om een tijd gaat en weergegeven in de cel als :mm is de waarde van de cel altijd een decimaal of toch bijna altijd. dat kan ik denk ik niet omzeilen :s
 
Debug met F8 door de code en zie dat W dezelfde waarde heeft als je goede coderegel en O hetzelfde resultaat heeft als O in je goede coderegel.
 
Debug met F8 door de code en zie dat W dezelfde waarde heeft als je goede coderegel en O hetzelfde resultaat heeft als O in je goede coderegel.

Als ik dit doe met een werkdag van 7:24 wat voor Excel 2010 0,3083333 is als decimaal komt met uw code W als 3083333 (dus een geheel getal) en dan werkt de code maar niet met het gewenste resultaat :(.
W wordt wel correct in O geplaatst, maar O wordt niet in de gevraagde cellen geplaatst (wel als ik de cellen instel op mijn sheet als text maarja dan wordt ze ook niet uitgevoerd). Ik vind het persoonlijk gewoon zeer vreemd dat de error komt wanneer W geen geheel getal is.
 
JA het werkt!

Dim W as Double was hier nog het probleem voor uw code, had alle soorten variabels geprobeerd en stond nog op Double, terug op Variant gezet en nu werkt het wel zoals het de bedoeling is :)

THX guys :)

Moesten mensen geïnteresseerd zijn om hun eigen overuren bij te houden zou het normaal nu wel moeten werken voor ieder zijn situatie ;-)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan