Установить диапазон с помощью объекта Range -> Объект Range потерпел неудачу? - PullRequest
0 голосов
/ 22 апреля 2019

Может кто-нибудь помочь мне отладить этот кусок кода?

....    
Dim searchRng as Range

With Sheets("Database")

    Set searchRng = Range("pointer.address:.cells(pointer.End(xlDown).Row,pointer.Column).address") 

End with

Я получаю сообщение об ошибке 1004: Метод «Диапазон» объекта «_Global» не удался «Указатель» - это ранее определенный диапазон одной ячейки (B6). После различных попыток отладки проблема, похоже, связана с .адресом ... Насколько я смог отследить ее.

Заранее спасибо! Leo

1 Ответ

2 голосов
/ 22 апреля 2019

Проблема здесь в том, что кавычки используются для передачи имени диапазона объекту .Range(), но вы хотите передать ему результаты вызова метода .address. Если вы поместите эти вызовы методов в кавычки, VBA не будет их запускать и вместо этого попытается интерпретировать то, что у вас есть в них, как имя диапазона, на который вы ссылаетесь. С помощью этих методов необходимо создать строку имени диапазона и передать результат в объект .Range().

Есть несколько способов сделать это. Этот первый выделяет конструкцию имени диапазона и назначает его переменной, которая затем может быть передана в .Range().

Sub test()

Dim searchRng As Range
Dim CllNameA As String
Dim CllNameB As String
Dim CllRange As String

With Sheets("Database")
    CllNameA = .Range("pointer").Address
    CllNameB = .Range("pointer").End(xlDown).Address


    CllRange = CllNameA & ":" & CllNameB


    Set searchRng = .Range(CllRange)


End With

End Sub

Эта следующая подпрограмма объединяет ту же методологию в одну строку. Он все еще делает то же самое, но так как он делает все это сразу, его немного труднее для читателя-человека.

Sub test2()

Dim searchRng As Range

With Sheets("Database")

    Set searchRng = .Range(.Range("pointer").Address & ":" & .Range("pointer").End(xlDown).Address)

End With

End Sub

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

...