VBA: 2-D array gebruiken / subscript valt buiten het bereik.

Status
Niet open voor verdere reacties.

SjonR

Verenigingslid
Lid geworden
10 nov 2016
Berichten
3.279
Helpers,

Ik ben aan het experimenteren met het verwijderen van rijen met behulp van een tijdelijke 2D-Array. Het lukt met echter niet om de 2D-array weer terug op het tabblad te krijgen. Het subscript valt buiten het bereik, dus kennelijk heb ik iets met het instellen van het formaat van de array niet begrepen.

Wat doe ik fout?

Code:
Sub testen()

Arr = Cells(1).CurrentRegion

ReDim arr2(UBound(Arr), 2) As String
n = 1
    For i = 1 To UBound(Arr)
        If Weekday(Arr(i, 1)) < 6 Then
            For j = 1 To 2
                arr2(n, j) = Arr(i, j)
                n = n + 1
            Next
        End If
    Next

Cells(1).Resize(UBound(arr2), 2) = arr2

End Sub
 

Bijlagen

  • tijdelijke Array.xlsm
    12,9 KB · Weergaven: 39
Laatst bewerkt:
n=n+1 stond binnen de lus, n kon dus 60 worden, groter dan de array

Code:
Sub testen()

Arr = Cells(1).CurrentRegion

ReDim arr2(UBound(Arr), 2) As String
[COLOR="#FF0000"]n = 0[/COLOR]
    For i = 1 To UBound(Arr)
        If Weekday(Arr(i, 1)) < 6 Then
            For j = 1 To 2
                arr2(n, j) = Arr(i, j)
                
            Next
            [COLOR="#FF0000"]n = n + 1[/COLOR]
        End If
    Next

Cells(1).Resize(UBound(arr2), 2) = arr2

End Sub
 
Laatst bewerkt:
ik ben er uit gekomen:

Code:
Sub testen()

Arr = Cells(1).CurrentRegion

ReDim arr2(UBound(Arr), 2) As String

    For i = 1 To UBound(Arr)
        If Weekday(Arr(i, 1)) < 6 Then
            For J = 0 To 1
                arr2(n, J) = Arr(i, J + 1)
            Next
            n = n + 1
        End If
    Next

Cells(1).Resize(UBound(arr2), 2) = arr2

End Sub


@ Alphamax,

Dank voor je oplossing. Ik was er zo ongeveer rond dezelfde tijd achter. N= 0 laat ik achterwege, want die is standaard 0.

Gr.

Sjon
 
Laatst bewerkt:
gebruik "beeld - venster lokale variabelen"
 
Bij een 'redim array' is de ondergrens nul (0 to ubound(arr)-1,0 to 1) mits je 'Option Base' niet op 1 hebt gezet.
n=1 moet dus weg.

n = n + 1 moet onder 'next'.

Code:
Sub testen()


Arr = Cells(1).CurrentRegion


ReDim arr2(UBound(Arr)-1, 1) As String


    For i = 1 To UBound(Arr)
        If Weekday(Arr(i, 1)) < 6 Then
            For j = 0 To 1
                arr2(n, j) = Arr(i, j + 1)
            Next
           n = n + 1
        End If
    Next


Cells(1).Resize(UBound(arr2), 2) = arr2


End Sub
 
Laatst bewerkt:
gebruik "beeld - venster lokale variabelen"

ehhhhh.... daar ga ik me in verdiepen.

Edit:

daar heb ik op de basiscursus VBA werkelijk geen woord over gehoord, maar is wel superhandig. Thanks!!!!!!

Ook jij bedankt Harry :thumb:
 
Laatst bewerkt:
Of:

Code:
Sub M_snb()
  sn = Cells(1).CurrentRegion

  For j = 1 To UBound(sn)
    If Weekday(sn(j, 1)) < 6 Then c00 = c00 & "|" & j
  Next

  st = Split(Mid(c00, 2), "|")
  If c00 <> "" Then Cells(1, 5).Resize(UBound(st) + 1, 2) = Application.Index(sn, Application.Transpose(st), Array(1, 2))
End Sub

zieook: http://www.snb-vba.eu/VBA_Arrays.html#L_6.0.4.1
 
Veel te ingewikkeld hoor.
Pas je eens aan het niveau aan. :d
 
Zonder array maar wel met kolomkoppen (wat altijd een goed gebruik is).

Code:
Sub VenA()
  [G2].Formula = "=weekday(a2,2)=6"
  With Cells(1).CurrentRegion
    .AdvancedFilter 1, [G1:G2]
    .Offset(1).EntireRow.Delete
    .Parent.ShowAllData
  End With
  [G2].Clear
End Sub
 
@snb

Ik ben al lang blij dat ik een 2-d array begin te snappen. Jouw code is ff hoger qua niveau. Als je me belooft het uit te leggen, schrijf ik me in voor de helpmij-dag.

Gr

Sjon
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan