• 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

Status
Niet open voor verdere reacties.

R0bert

Gebruiker
Lid geworden
10 apr 2016
Berichten
48
Enige tijd geleden heb ik via dit forum een Visual Basic formule gekregen die precies deed wat ik graag wilde. Nu krijg ik bij het gebruik van de Command Button een foutmelding: "Fout 9 tijdens uitvoering. Het subscript valt buiten het bereik."

Omdat ik de formule totaal niet begrijp, weet ik ook niet hoe ik de fout moet oplossen.
De bedoeling is, dat de naam van de speler (kolom B, C, D van tabblad Teamindeling)) in het tabblad komt te staan van het team dat in kolom Q wordt genoemd. Als de speler een man is ("M" in kolom E) moet die in kolom A van het betreffende tabblad komen, als het een vrouw ("V" in kolom E) moet die in kolom B komen.

De enige verandering die ik in het bestand heb aangebracht is het toevoegen van kolom U en V, maar die zijn voor de actie van de CommandButton niet relevant.

Hieronder heb ik de formule weergegeven.
Een printscreen van de foutopsporing voeg ik bij.
Kan iemand aangeven wat ik moet aanpassen om de formule weer te laten werken??
foutopsporing.jpg

Private Sub CommandButton1_Click()
Dim sn, arr, cl, cll As Range, j As Long, x As Long, c00 As String
Application.ScreenUpdating = False
sn = Sheets("Teamindeling").Cells(1).CurrentRegion
For Each cll In Columns(17).SpecialCells(2).Offset(1).SpecialCells(2)
If InStr(c00, cll) = 0 Then c00 = c00 & "|" & cll
Next cll
For Each cl In Split(Mid(c00, 2), "|")
ReDim arr(1, 0)
For j = 1 To UBound(sn)
If sn(j, 17) = cl Then
x = sn(j, 5) = "V"
arr(Abs(x), UBound(arr, 2)) = sn(j, 2) & IIf(Len(sn(j, 3)) > 0, " " & sn(j, 3), "") & " " & sn(j, 4)
ReDim Preserve arr(1, UBound(arr, 2) + 1)
End If
Next j
If UBound(arr, 2) > 0 Then
If IsError(Evaluate("'" & cl & "'!A1")) Then Sheets.Add(, Sheets(Sheets.Count)).Name = cl
With Sheets(cl)
.Cells(1).CurrentRegion.ClearContents
.Cells(1).Resize(UBound(arr, 2), 2) = Application.Transpose(arr)
If arr(0, 0) <> "" Or arr(0, 1) <> "" Then
On Error Resume Next
If arr(0, 0) <> "" Or arr(0, 1) <> "" Then
.Columns(1).Resize(, 2).SpecialCells(4).Delete
Else
.Columns(2).SpecialCells(4).Delete
End If
On Error GoTo 0

End If
End With
End If
Erase arr
Next cl
End Sub
 
Plaats je document.
 
Als de cellen in de verborgen kolommen G,H,I,J K leeg zijn heb je geen currentregion naar kolom Q.
 
Cel J1 is leeg, da's de boosdoener.
 
De lege cel J1 blijkt inderdaad de boosdoener! Dank voor het oplossen van dit vraagstuk.
Is aan een amateur als ik uit te leggen waarom de formule hierop is vastgelopen?
 
Currentregion is een aaneengesloten bereik.

Als kolom J leeg is, dan is de currentregion A1:I??? aantal rijen aaneengesloten.

sn = a1:I100
Ubound(sn,2) = 9 (aantal kolommen).

sn(i,9) is maximaal
sn(i,17) is er niet.
 
En om het wat lastiger te maken
Code:
sn = Sheets("Teamindeling").Cells(3,1).CurrentRegion
geeft wel het juiste bereik. Maak gebruik van <Ctrl> + a om dit soort dingetjes uit te zoeken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan