2015-08-13 4 views
0

Im пытается найти диапазон на отдельном листе.Excel VBA - Dynamic Range size

Dim abc As Range 
Dim size As Integer 
size = Sheets("Misc").Cells(1, Sheets("Misc").Cells(1, 1).Rows.End(xlDown).Count) 
abc = Sheets("Misc").Range("A1:A" & size) 

Я стараюсь получить «размер», чтобы правильно подсчитать количество строк. Что я делаю не так?

ответ

4

Вам понадобится Set диапазон.

dim sz as LONG 
with Sheets("Misc") 
    sz = .Cells(rows.count, 1).End(xlUp).Row 
    SET abc = .Range("A1:A" & sz) 
end with 

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

+0

В своем первоначальном 'size = Sheets (« Misc ») ...', ему не нужно было бы добавлять '.Row', или поскольку' Size' был установлен в 'Integer', VB признает, что хочет integer, поэтому возвращаем строку? Я бы не подумал, что это будет, правильно? – BruceWayne

+1

Исходная формула действительно была ссылкой только на одну ячейку, а не на диапазон ячеек, поэтому «размер» был только когда-либо. '.Count' должен был быть перемещен за пределы последней привязки, возможно, как' .Rows.Count'. Он использовался как параметр столбца в свойстве [Range.Cells] (https://msdn.microsoft.com/en-us/library/office/ff196273.aspx). Достаточно сказать, что было много чего. – Jeeped

+0

Благодарим вас за разъяснение @ Jeeped. – Kayote