2014-10-21 2 views
0

Я пытаюсь определить диапазон от вершины столбца до последней заполненной ячейки в этом столбце, но по какой-то причине, когда я делаю это объявление, он дает мне определенный объект ошибка, и я действительно смущен, почему это происходит. Вот линия:Определить диапазон от верхней до последней использованной ячейки в столбце

Public Sub SomeRange 
    Set rng1 = Sheets("FuzzyLookup_AddIn_Undo_Sheet")._ 
    Range(Range("B2"), Range("B2").End(xlDown)) 
End Sub 

Я довольно новичок в vba, поэтому любая помощь, которую здесь могут предоставить, будет высоко оценена.

ответ

2
Set rng1 = ThisWorkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _ 
Range("B2", Thisworkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet"). _ 
Range("B1048576").End(xlup).Address) 

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

+0

+1 и @ user3034460 он также поможет «dim rng1 As Range», если вы еще не сделали – Daniel

+0

В вашем ответе хорошо отметить, что это не работает для версий 2003 и ниже, так как вы используя ссылку «B1048576» в качестве ссылки. Поддержка 1 миллиона + строк была введена только в 2007 году. – Manhattan

0

Попробуйте это:

Sub GetLastRow() 

    Dim WS As Worksheet 
    Dim Rng1 As Range 

    Set WS = ThisWorkbook.Sheets("FuzzyLookup_AddIn_Undo_Sheet") 
    With WS 
     Set Rng1 = .Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row) 
    End With 

    MsgBox Rng1.Address 

End Sub 

Результат:

enter image description here

0

Range("B2:B" & ActiveSheet.UsedRange.rows.count) Это мой любимый, но он может включать в себя пустые ячейки, если они были отформатированы пользователем (например, подсвечена)

Если вы не отформатировали ячейки, я бы использовал это метод. Независимо от того, что лучше начать с UsedRange, чем полное число строк (даже при использовании xlup)

0

альтернатива Кроноса метод:

Public Sub SomeRange 
    With Sheets("FuzzyLookup_AddIn_Undo_Sheet") 
    lastRow = Range("B" & Cells.Rows.Count).End(xlUp).Row 
    Set rng1 = .Range("B2:B" & lastRow) 
    End With 
End Sub 

Я предпочитаю ставить „lastRow“ в качестве явного переменная, она делает обзор кода простым. Кроме того, с использованием дополнительной сложности «Range» («B» Cells.Rows.Count) .End (xlUp) .Row «делает вас обратно совместимым со старыми версиями Excel, где количество строк ограничено только более чем 64k строк.

Смежные вопросы