• 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.

Foutmelding 9 in macro 'Het subscript valt buiten het bereik'.

Status
Niet open voor verdere reacties.

Niek91

Gebruiker
Lid geworden
22 feb 2012
Berichten
77
Goedemiddag,

Ik gebruik al sinds een tijdje succesvol een mooie macro maar opeens krijg ik nu een foutmelding zonder dat er iets is gewijzigd.
Nu krijg ik een foutmelding waar ik echt niet uitkomt. Onderstaande is de macro. dikgedrukt is waar die op vastloopt. Wie kan mij helpen?

Option Explicit
Sub HetLoopje()
Productiviteit Sheets("orderpicken").Range("A1").CurrentRegion, 20, 18, Range("A3:G32")
Productiviteit Sheets("inpakken").Range("A1").CurrentRegion, 1, 6, Range("A36:G65")
Productiviteit Sheets("Trucken-Invakken").Range("A1").CurrentRegion, 14, 9, Range("A69:G120")

End Sub


Sub Productiviteit(MijnGegevens As Range, KolNaam As Integer, KolTijd As Integer, Uitvoer As Range)
Dim a, i&, it, dTijd As Double, splits, Pers$
a = MijnGegevens.Value 'inlezen gegevens

With CreateObject("System.Collections.Arraylist") 'om straks oplopend te sorteren
For i = 2 To UBound(a)
Select Case VarType(a(i, KolTijd)) 'kijk naar je tijd
Case vbString 'is het een string
splits = Split(Replace(a(i, KolTijd), "-", " ")) 'vervang "-" door een spatie en verknip op die spaties
If UBound(splits) = 3 Then '4 knipsels
a(i, KolTijd) = DateSerial(splits(2), splits(1), splits(0)) + TimeValue(splits(3)) 'je tijdstip met datum
Else
a(i, KolTijd) = TimeValue(splits(0)) 'je tijdstip End If
Case vbDate, vbDouble 'het is al een date of een double
Case Else: MsgBox "??? vbDate"
End Select
dTijd = a(i, KolTijd) 'maak er een double van
.Add Join$(Array(Format(dTijd, "00000.0000000"), a(i, KolNaam)), Chr(2)) 'naar arraylist schrijven
Next
.Sort 'sorteren
a = .toarray() 'naar array schrijven
If Not IsArray(a) Then MsgBox "geen gegevens", vbCritical: Exit Sub
End With

With CreateObject("scripting.dictionary")
.comparemode = 1
For i = LBound(a) To UBound(a)
splits = Split(a(i), Chr(2))
dTijd = splits(0)
Pers = splits(1)
it = .Item(Pers) 'kijk naar die persoon in de dictionary
If VarType(it) = vbEmpty Then 'persoon bestond nog niet in dictionary
.Item(Pers) = Array(Pers, dTijd, dTijd, 0, 1, 0, 0) 'array met naam, Start, Einde, onderbrekingen,aantal scans, gewerkte tijd,Productiviteit
Else
If dTijd - it(2) > TimeSerial(0, 30, 0) Then it(3) = it(3) + dTijd - it(2) 'tijd tov vorig gegeven bijtellen indien tussentijd>30 min
it(4) = it(4) + 1 'scan + 1
it(2) = dTijd 'laatste tijd
.Item(Pers) = it 'terugschrijven naar dictionary
End If
Next
If .Count = 1 Then .Item("") = Array("", "", "", "", "", "", "")

a = ""
If .Count Then
 
Beste,

Heb je de code eens doorlopen met F8 en in het Venster direct de waarde van TimeValue(splits(0)) opgevraagd? Misschien zie je waarom je een fout krijgt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan