Я написал простой код, чтобы проиллюстрировать мое затруднительное положение.
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
Что происходит: мы подсчитываем строки, содержащие значения, начинающиеся с A1. Если число строк, содержащих значения > 1, код отлично работает. Однако, если A1 является единственной ячейкой, которая содержит любое значение, k = 1 048 576, которое, я думаю, является максимальным количеством строк, разрешенных в Excel.
Почему не k = 1?
Изображения:
EDIT: Обходной путь, который я использую, следующий:
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
Так как k всегда равно 1048576, когда число строк со значениями равно 1. Просто немного глупо делать что-то вроде этого.