Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Array vraagje  (gelezen 17393 keer)

0 leden en 1 gast bekijken dit topic.

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Array vraagje
« Gepost op: 09 februari 2020, 16:43:06 »
Hallo Helpers en oplossers,

Tijdje jullie hulp niet nodig gehad omdat ik ook graag bijleer met try en error, en dat helpt zeer wel heel goed ;)

Maar nu kom ik ergens niet helemaal uit en wil graag begrijpen waarom het niet werkt. Het stukje code waar het om draait is:
        x = Array(22, 23, 25) 'Dynamischtarief, Wachttarief en BTW over het Ritdeeltarief
        y = Array(CB_20 = True, T_05 <> "", Cells(Irow, 24) <> "")
z = Array(RoundAbsHalfUp(Cells(Irow, 21) * (Cells(Irow, 20) - 1), 2), Format(T_05, "0,00") / 100, Round(Cells(Irow, 24) / BTWLp1 * BTWLd100, 2))
            For i = 0 To 2
                With ws.Cells(Irow, x(i))
                    If y(i) Then
                        .Value = z(i)
                    Else
                        .Value = ""
                    End If
                End With
            Next i

Dit geeft een foutmelding op de regel "Z=Array(" en die luidt:

Citaat
Fout 13 tijdens uitvoering: Typen komen niet met elkaar overeen.

Verander ik de code zonder de Z regel zoals hieronder weergegeven dan werkt het wel maar dat vind ik eigenlijk niet zo heel mooi natuurlijk. en heeft meer regels code.

        x = Array(22, 23, 25) 'Dynamischtarief, Wachttarief en BTW over het Ritdeeltarief
        y = Array(CB_20 = True, T_05 <> "", Cells(Irow, 24) <> "")
            For i = 0 To 2
                With ws.Cells(Irow, x(i))
                    If y(i) Then
                        If i = 0 Then .Value = RoundAbsHalfUp(Cells(Irow, 21) * (Cells(Irow, 20) - 1), 2)
                        If i = 1 Then .Value = Format(T_05, "0,00") / 100
                        If i = 2 Then .Value = Round(Cells(Irow, 24) / BTWLp1 * BTWLd100, 2)
                    Else
                        .Value = ""
                    End If
                End With
            Next i

Dus wie kan mij uitleggen waarom de eerste NIET werkt, moet ik het anders in de Array zetten/benoemen?

Mijn dank is zoals altijd weer onmetelijk
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Array vraagje
« Reactie #1 Gepost op: 09 februari 2020, 17:11:34 »
Grappig is altijd wanneer ik denk er niet uit te komen, en dus hulp ga zoeken krijg ik een ingeving die, zoals het er nu naar uitziet klopt: NML, een van de cellen blijkt leeg te zijn tijdens de uitvoering en dat geeft de melding.

Dus mijn eerste stukje code werkt wel degelijk, ik moet gewoon zorgen dat er minimaal een 0 is ipv "LEEG".

Ik zet deze vraag dus op opgelost....
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Array vraagje
« Reactie #2 Gepost op: 09 februari 2020, 17:20:59 »
Hallo Josc1965,
Dus mijn eerste stukje code werkt wel degelijk, ik moet gewoon zorgen dat er minimaal een 0 is ipv "LEEG".
Of misschien een ON ERROR toevoegen aan je code.
Maar hoe of zo durf ik niet te suggereren, je staat lichtjaren verder dan ik ooit zal geraken  :thumbsup:

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Array vraagje
« Reactie #3 Gepost op: 09 februari 2020, 17:40:46 »
Ja, ON Error is een optie, maar niet tijdens try en Error, dan leer je niets  \o/
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.129
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Array vraagje
« Reactie #4 Gepost op: 09 februari 2020, 17:49:59 »
 ;D Daar heb je ook weer gelijk in  ;D

succes verder  :)

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Array vraagje
« Reactie #5 Gepost op: 10 februari 2020, 10:56:17 »
Dag Johan,

Het is, zoals je waarschijnlijk zelf al geconcludeerd hebt, weer de schuld van Microsoft die met zijn "afronden"-functie op het werkblad iets anders doet dan met "round" in vba als een getal op een 5 eindigt, en je bijgevolg genoodzaakt was gebruik te maken van een ergens op het Internet gevonden "RoundAbsHalfUp"-functie.
Maar goed, je bent eruit geraakt, en dat is wat telt. Een andere reden waarom het niet zou werken is ook geenszins te bedenken.

Anderzijds, ik heb het je vaker weten doen, (veel?) tijd spenderen om de lengte van je code zo extreem mogelijk in te korten. Een leuke hobby allicht, maar zelf zou ik vaak niet zo ver gaan: een prettig lezende code die even goed en even snel is geniet meestal mijn voorkeur.
Maar vermits dit niet over exacte wetenschap maar over smaak gaat speel ik graag mee, en dan valt het onmiddellijk op dat het nog een stukje korter kan, dus probeer misschien deze eens (uiteraard zonder aan x, y en z te raken):

For i = 0 To 2
    ws.Cells(Irow, x(i)) = IIf(y(i), z(i), "")
Next i

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Array vraagje
« Reactie #6 Gepost op: 10 februari 2020, 12:41:37 »
Hallo pitufo,

Dank wederom voor je bijdrage. Mijn gehele userformcode bedraagt inmiddels ruim 2100 regels code die ik in de afgelopen jaren steeds verder aan het uitbreiden was omdat er steeds weer meer automatisch moest gaan, immers uiteindelijk wil ik zelf zo min mogelijk doen om mijn administratie te voltooien zodat de boekhouder ook minder hoeft te doen en ik dus geld bespaar ;)

Uiteraard werkt alles lekker door en is het, door jou terecht opgemerkt, inmiddels ook een leuke hobby om te kijken waar ik de code kan inkorten terwijl ik zelf nog steeds begrijp waar het over gaat. Dit gaat dus met stukjes en beetjes omdat ik dan weer ergens iets leuks zie, code of ideeen, en dat dan op mijn testbestand ga uitproberen. Wanneer het dan, na uitvoerig testen, werkt komt het wellicht in aanmerking om in mijn werkbestand te  worden gebruikt.

For i = 0 To 2
    ws.Cells(Irow, x(i)) = IIf(y(i), z(i), "")
Next i

IIf kende ik nog niet als zodanig in VBA, en zoals ik het begrijp is dat dus de ALS functie uit het werkblad. Vraag me wel af of dit dan ook nog te nesten valt?

Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Array vraagje
« Reactie #7 Gepost op: 10 februari 2020, 13:19:21 »
Hoi,

Citaat
zoals ik het begrijp is dat dus de ALS functie uit het werkblad
Inderdaad, zo eenvoudig is het, en dan ken je meteen zelf het antwoord op
Citaat
Vraag me wel af of dit dan ook nog te nesten valt?
:D
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Array vraagje
« Reactie #8 Gepost op: 10 februari 2020, 13:40:54 »
Hoi pitufo,

Dat is dan ook weer helder, ik heb weer een leermoment, dank daarvoor  :thumbsup:
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.277
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Array vraagje
« Reactie #9 Gepost op: 10 februari 2020, 18:16:46 »
Pas op...  IIf heeft niet dezelfde werking als de If functie van de worksheet. De IIf doorloopt namelijk altijd de hele structuur waarmee je voor onverwachte dingen kan komen te staan.  ;)
______________________________

Groet, Leo

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Array vraagje
« Reactie #10 Gepost op: 10 februari 2020, 18:47:58 »
Hoi RedHead,

Dank voor je bijdrage, en opmerking, en proefondervindelijk had ik al wat vreemde, ongewenste, uitkomsten. ik ben mij dus bewust van de 'gevaren' van het gebruik van IIf. Mooie van Try en Error is dat het uiteindelijk allemaal goede leermomenten oplevert.  ;)
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

 


www.combell.com