Ik heb een eenvoudige code geschreven om mijn hachelijke situatie te illustreren.
Sub test()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
End Sub
Wat er gebeurt is het volgende: We tellen de rijen die waarden bevatten beginnend bij A1. Als het aantal rijen dat waarden bevat > 1 is, werkt de code prima. Echter, als A1 de enige cel is die een waarde bevat, k = 1,048,576, wat volgens mij het maximum aantal rijen is dat in Excel is toegestaan.
Waarom geldt niet k = 1?
Afbeeldingen:
EDIT: De workaround die ik'gebruik is de volgende:
Sub test()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count
If k = 1048576 Then
k = 1
End If
MsgBox (k)
End Sub
Omdat k altijd gelijk is aan 1048576 als het aantal rijen met waarden 1 is. Het voelt alleen een beetje gek om zoiets te moeten doen.
Je moet UsedRange
gebruiken, zoals dit:
Sub test()
Dim sh As Worksheet
Dim rn As Range
Set sh = ThisWorkbook.Sheets("Sheet1")
Dim k As Long
Set rn = sh.UsedRange
k = rn.Rows.Count + rn.Row - 1
End Sub
Het + rn.Row - 1
gedeelte is omdat de UsedRange alleen begint bij de eerste rij en kolom die gebruikt wordt, dus als je iets hebt in rij 3 tot 10, maar rij 1 en 2 is leeg, dan zou rn.Rows.Count
8 zijn