Functie aanroep aan de linkerkant van de toewijzing moet een Variant of Object als

Status
Niet open voor verdere reacties.

Speedy7912

Gebruiker
Lid geworden
4 dec 2009
Berichten
65
Onderstaande code zou een 2 dimensionaal array als resultaat van een functie moeten geven. De input is een 1 dimensionaal array met daarin de regelnummers van het invoerveld.

per regel moet het resulterend array 5 waarden van die regel inlezen.

ik krijg echter devolgende foutmelding met de tekst in rood (in de code) als oorzaak:

Compiler-fout:
Functie aanroep aan de linkerkant van de toewijzing moet een Variant of Object als resultaat geven.



Code:
Private Function arrayVullenMetItems(invoerArray() As Variant) As Variant()
Dim huidigeInvoerRegel As Integer, item As Integer
Dim datum As Date
Dim basisTarief As Currency, toeslagTarief As Currency

    For item = 1 To UBound(invoerArray)
    ReDim arrayVullenMetItems(1 To UBound(invoerArray), 1 To 5)
        With Blad1
            '----variabele declareren----'
            huidigeInvoerRegel = invoerArray(item)
            huidigeUitvoerRegel = eersteUitvoerRegel + item - 1
            datum = .Cells(huidigeInvoerRegel, 1).Value
            [COLOR="Red"]arrayVullenMetItems(item, 1)[/COLOR] = IsoWeekNumber(datum)
            arrayVullenMetItems(item, 2) = datum
            arrayVullenMetItems(item, 3) = .Cells(huidigeInvoerRegel, 2).Value 'zorgfunctie
            arrayVullenMetItems(item, 4) = .Cells(huidigeInvoerRegel, 3).Value 'uren
            basisTarief = .Cells(huidigeInvoerRegel, 4).Value
            toeslagTarief = .Cells(huidigeInvoerRegel, 5).Value
            If basisTarief <> "" Then
                arrayVullenMetItems(item, 5) = basisTarief
            Else
                arrayVullenMetItems(item, 5) = toeslagTarief
            End If
        End With
    Next item
    
End Function

Wat doe ik fout of zie ik over het hoofd? Na mijn idee is dit namelijk een variant.
 
Hiervoor zjin funkties niet bedoeld.
Ook aan een sub kun je argumenten doorgeven.

Code:
Sub arrayVullenMetItems(invoerArray() As Variant)
    For j=0 to  UBound(invoerArray)
        With selection
            invoerarray(j, 1) = IsoWeekNumber(.cells(1).Value)
            invoerarray(j, 2) = datum
            invoerarray(j, 3) = .Cells(.row, 2).Value
            invoerarray(j, 4) = .Cells(.row, 3).Value 'uren
        End With
    Next     
End Sub
Je verwees in het linkerdeel naar de funktie. Ca ne va pas.
 
SNB,

dank je voor je reactie. Ik zie alleen met deze sub dat je het oorspronkelijke array aanpast. Reden dat ik een functie heb gebruik is dat het originele array niet wil aanpassen daar dit meerdere keren gebruikt wordt voor diverse andere sub/functie aanroepen.

is het ook mogelijk vanuit een Sub een waarde terug te leveren? of moet ik een lokaal array definiëren en als laatste stap aan mijn functie (return waarde) toewijzen?

Gr.
 
het is eigenlijk heel simpel. Ik heb een 'probleem' opgedeeld in sub-problemen. Deze pak ik 1 voor 1 aan. Kortom ik vul een array met regelnummers gesorteerd op datum. Hiermee start ik procedures die andere sub-porblemen afhandelen. 1 hiervan is het vullen met de daadwerkelijke regels welke in een ander sub-probleem weer verwerkt worden als regels van een factuur.

Het komt er dus op neer dat ik door de sub-probleem structuur een overzichtelijke code krijg. Bij een aanpassing in de layout is deze modulair aan te passen zodat niet de gehelo code herschreven hoeft te worden. Nadeel van deze aanpak is dat er redelijk wat van de resources gevraagd wordt omdat er nogal wat overhead is. Maar goed dit is voorlopig een weloverwogen beslissing, al zal deze in de loop van de tijd wel veranderen. Voor nu moeten we snel een oplossing hebben. Daar meerdere mensen de code moeten begrijpen (begrijpen is in dit geval niet doorontwikkelen overigens) is overzicht momenteel belangrijkers als de verwerkingssnelheid.
 
Even losstaand van het feit of dit nu wel de ideale oplossing oplevert, als ik hier naar kijk:
Code:
Private Function arrayVullenMetItems(invoerArray() As Variant) As Variant()
dan declareer je een functie. Vervolgens ga je hier een array redimensioneren die de naam heeft van je functie...
Code:
    ReDim arrayVullenMetItems(1 To UBound(invoerArray), 1 To 5)
en dan ga je hier dus die functie aanroepen en daar een waarde aan toe kennen...
Code:
arrayVullenMetItems(item, 1) = IsoWeekNumber(datum)
en dat kan dus niet. Vandaar je foutmelding
 
Ik was er inmiddels ook achter, hartelijk dank voor jullie input. Ik heb een lokaal array aangemaakt en deze als laatste stap deze pas aan de returnwaarde toegevoegd. Hiermee is het inmiddels opgelost.

mijn dank is groot voor het duwtje in de goede richting
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan