#vba #range #declaration
Вопрос:
Привет, я новичок в VBA и мне было интересно, почему, когда я сбрасываю свой диапазон, все в пределах диапазона удаляется. Разве мы не должны переназначать диапазоны в VBA? Строка, в которой возникает проблема, заключается supervisor_range = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp))
в том, что все имена на изображении ниже удаляются.
Sub remove()
Dim supervisorsheet As Worksheet
Set supervisorsheet = Worksheets("supervisor")
Dim supervisor_range As Range
Dim cell As Range
last_row = supervisorsheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Set supervisor_range = supervisorsheet.Range(Cells(2, 1), Cells(last_row, 1))
supervisor_range.RemoveDuplicates Columns:=1, Header:=xlNo
With supervisorsheet
supervisor_range = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp))
End With
End Sub
Ответ №1:
Этот
supervisor_range = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp))
не устанавливает переменную supervisor_range
в заданный диапазон. Вместо этого вы копируете значения диапазона в диапазон, на который ссылается supervisor_range
.
Если вы хотите установить переменную в диапазоне, вам нужно использовать ключевое слово Set
Set supervisor_range = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp))
без Set
следующих 2 строк они идентичны!
supervisor_range = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp))
supervisor_range.Value = .Range(Cells(2, 1), .Range("A" amp; .Rows.Count).End(xlUp)).Value
Ответ №2:
В дополнение к существующему ответу, я не совсем понимаю, почему вы делаете то, что делаете, — определяете диапазон cel, расширяете его, определяете его снова…
Вот упрощенная версия вашего кода, которая делает именно то, что должна — удаляет дубликаты из заданного диапазона:
Sub remove()
Dim supervisorsheet As Worksheet
Set supervisorsheet = Worksheets("supervisor")
Dim supervisor_range As Range
With supervisorsheet
last_row = .Cells(.Rows.Count, 1).End(xlUp).Row
Set supervisor_range = .Range(Cells(2, 1), Cells(last_row, 1))
supervisor_range.RemoveDuplicates Columns:=1, Header:=xlNo
End With
End Sub