array max gegevens

Status
Niet open voor verdere reacties.

enrico85

Gebruiker
Lid geworden
13 sep 2013
Berichten
56
Is er een max. aantal regels dat er naar een array kan worden gelezen?

Krijg foutmelding 6 overloop bij onderstaande code.

Rapportage dat naar de array word gelezen bevat circa 100.000 regels.


Code:
Dim sn, c As Range, dGeboorte As Date, dBegin As Date, sNaam As String, l As Long, WB As Workbook, splits, bOpen As Boolean
  splits = Split("I:\StafDGR\FIA\Administratie\FinAdm\Werkinstructies en kostenplaatsen FA\C_rapportage labnota.xlsx ", "\")
  On Error Resume Next
  Set WB = Workbooks(splits(UBound(splits)))
  bOpen = Not (WB Is Nothing)
  If Not bOpen Then
    Set WB = Workbooks.Open(Join(splits, "\"))
    If WB Is Nothing Then
      MsgBox "kan die file niet openen", vbCritical: Exit Sub
    End If
  End If
  On Error GoTo 0
  sn = WB.Worksheets(1).Range("A4").CurrentRegion          'kopie van je data-gegevens staan in dit blad en lees je naar een array
  If Not bOpen Then WB.Close xlNo

  For Each c In ActiveWorkbook.Sheets("orderregel").UsedRange.Columns("A").SpecialCells(xlConstants)  'loop alle namen af in je C-kolom
    If c.Row > 1 Then
      sNaam = c.Value
      dGeboorte = c.Offset(, 1).Value
      dBsn = c.Offset(, 2).Value
      dBegin = c.Offset(, 6).Value                         'begindatum staat 1 kolom naar rechts
      c.Offset(, 4).Value = "Niet gevonden"
      For l = 1 To UBound(sn)                              'loop alle gegevens in je array af
        If sn(l, 4) = dBsn And sn(l, 5) <= dBegin And (dBegin <= sn(l, 6) Or IsEmpty(sn(l, 6))) Then  'geboortedatum klopt, deel van de naam ook en valt binnen periode
        Select Case sn(l, 8)                                       'onderzoek de mogelijke waarden van sn(l,10)
  Case 403400 To 403470: c.Offset(, 4).Value = 403400      'ligt die hiertussen, dan schrijf je deze waarde weg
  Case 403700 To 403770: c.Offset(, 4).Value = 403700      '2e mogelijkheid, andere waarde wegschrijven
  Case 403800 To 403870: c.Offset(, 4).Value = 403800
  Case 403900 To 403980: c.Offset(, 4).Value = 403900
  Case 405700 To 405770: c.Offset(, 4).Value = 405720
  Case 405800 To 405870: c.Offset(, 4).Value = 405820
  Case 405900 To 405970: c.Offset(, 4).Value = 405920
  Case 407640 To 407680: c.Offset(, 4).Value = 407100
  Case 407700 To 407900: c.Offset(, 4).Value = 407100
  Case 601100 To 602599: c.Offset(, 4).Value = 602600
  Case 603200 To 603980: c.Offset(, 4).Value = 603170
  Case Else: c.Offset(, 4).Value = sn(l, 8)               'in alle andere gevallen, de oorspronkelijke waarde wegschrijven
End Select
           Exit For                                         'spring uit de loop
        End If
       Next
       End If
       Next

End Sub
 
in welke regel gaat het mis ?
Voorbeeldbestand ?
 
Bij de foutopsporing arceert die de volgende regel "sn = WB.Worksheets(1).Range("A4").CurrentRegion".

Bij hetzelfde soort bestand met 10.000 regels lukt het wel, maar bij 100.000 geeft die de foutmelding. Het enigste verschil is het aantal regels aan data.

Kan het bestand niet zo maar delen, er staan namelijk gevoelige patiëntengegevens in.
Ik kan wel het e.e.a. bewerken, maar weet niet of je er dan iets aan hebt.
 
Als je aangeeft hoe groot (regels& kolommen) de 'currentregion' is, kunnen we zelf even testen op eigen systemen.
 
Laatst bewerkt:
ik vond dit op google;
De Runtime Error 6 optreedt in de Visual Basic -programma . Het is een overflow probleem dat kan optreden wanneer de Visual Basic- programma probeert te veel gegevens op te slaan in de tijdelijke mappen gebied . Runtime files helpen Windows vertalen taal van een programma in Windows taal, zodat het programma sneller draait . U kunt de Runtime Error 6 boodschap krijgen om verschillende redenen . Een reden is dat u gebruik maakt van een backslash in plaats van een slash in een van uw berekeningen . Andere redenen zijn een overbelaste tijdelijke map , verouderde software of een register fout .
 
Dit geeft bij mij geen foutmelding:

Code:
Sub M_snb()
  Cells(1).Resize(10 ^ 5, 10 ^ 2) = "abcdefg"
  
  sn = Cells(1).CurrentRegion
End Sub
 
De currentregion = A4 t/m H88646, maar de regels worden naarmate de tijd steeds meer.

Het zal dan inderdaad te maken moeten hebben met overbelaste tijdelijke map of verouderde software.

Code:
Sub M_snb()
  Cells(1).Resize(10 ^ 5, 10 ^ 2) = "abcdefg"
  
  sn = Cells(1).CurrentRegion
End Sub

Moet ik deze code in de andere code verwerken of vooraf uitvoeren?
 
Mijn code illustreert (dat is je blijkbaar ontgaan) dat jouw vooronderstellingen over 'overbelast' en verouderd' niet kloppen.
Gebruik geen code die je niet begrijpt. Bestudeer daarom eerst mijn code en concludeer dat je daar niets mee moet in jouw geval.
 
Laatst bewerkt:
Ik lees steeds iets over 32Bits en 2Gb aan max.
Weet jij daar iets meer van @snb?
 
Ik snap nu wat je bedoeld met jouw code, dat het niks te maken heeft met de grote.

Heeft het misschien met de declaraties te maken? Las ook ergens dat integer als grootse waarde 32.767 mag hebben. Al zie ik geen declaratie integer in de code.
 
Zonder declaraties zijn er geen beperkingen. Je bedoelt natuurlijk de grootte (zelfstandig naamwoord).
 
Sprak de man die de wereld 'overbals' wil aansmeren
Mijn code illustreert (dat is je blijkbaar ontgaan) dat jou vooronderstellingen overe 'overbals' en verouderd' niet kloppen.
 
@Octa

Dankjewel. Ik heb de fouten fluks gecorrigeerd.
Het lijkt me wel een prettige aanvulling op galabals en VBA globals.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan