Проблема здесь в том, что кавычки используются для передачи имени диапазона объекту .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
Существуют и другие способы достижения той же цели, но я надеюсь, что это, по крайней мере, направит вас на правильный путь.