Получить длину динамического диапазона VBA

Мне нужно сохранить длину динамического диапазона на основе первоначального выбора ячейки, а затем выбрать до конца столбца. Вот где я сейчас

Sub Macro1()

Dim number_prop_components As Integer
Dim range_prop As Range

Range("C26").Select
Set range_prop = Range(Selection, Selection.End(xlDown)).Select
number_prop_components = range_prop.Height
MsgBox (range_prop.Height)

End Sub

Когда я запускаю код и добираюсь до строки:

Set range_prop = Range(Selection, Selection.End(xlDown)).Select

Я получаю сообщение об ошибке:

Ошибка времени выполнения '424': требуется объект

Как я могу сохранить динамический диапазон, а затем сохранить его высоту или ширину как целое число?


person Omar123456789    schedule 26.06.2017    source источник


Ответы (2)


Вы не можете сделать переменную диапазона = a select, вам, вероятно, нужен только диапазон:

Set range_prop = Range(Selection, Selection.End(xlDown))

Затем вы можете использовать .rows.count и .columns.count для переменной, чтобы получить размер: range_prop.rows.count

Вы уверены, что хотите использовать .end (xldown)? он перейдет только к первому пробелу, а не до конца, если есть пробел.

Я немного почистил для вас ваш код:

Sub Macro1()
    Dim number_prop_components As Long, range_prop As Range
    Set range_prop = Range(Range("C26"), Range("C26").End(xlDown))
    number_prop_components = range_prop.Rows.Count
    MsgBox (number_prop_components)
End Sub
person Dan Donoghue    schedule 26.06.2017
comment
Большое тебе спасибо! Я только начинаю изучать VBA, и ваши предложения были очень полезны! - person Omar123456789; 27.06.2017

Set range_prop = Range(Selection, Selection.End(xlDown)).Select
number_prop_components = range_prop.Height
MsgBox (range_prop.Height)

Должно быть:

Set range_prop = Range(Selection, Selection.End(xlDown))
number_prop_components = range_prop.Rows.Count
range_prop.Select
MsgBox number_prop_components

1- Когда вы добавляете .Select в конце, вы вызываете подпрограмму, которая ничего не возвращает, поэтому вы не можете присвоить результат.

2- высота диапазона определяется количеством строк, используя myRange.Rows.count

3- не заключайте в круглые скобки параметры подпрограммы, а только при вызове функции, которая что-то возвращает.

4- Как правило, избегайте работы с выделением в VBA. Прочтите Как избежать использования Select в макросах VBA Excel

person A.S.H    schedule 26.06.2017
comment
Большое тебе спасибо! Я только начинаю изучать VBA, и ваши предложения были очень полезны! - person Omar123456789; 27.06.2017