.png)
Я пытаюсь создать именованный диапазон с помощью VBA. Оба FirstBodyCell
и ColumnCode
являются отдельными ячейками. Я хочу, чтобы именованный диапазон в конечном итоге был определен как что-то вроде этого (в зависимости от того, в каком столбце FirstBodyCell
находится ):
=Offset(Sheet1!$E$8,0,0,COUNTA(Sheet1!$E:$E)-COUNTA(Sheet1!$E$1:$E$7),1)
Использование подпрограммы ниже повышает
Ошибка выполнения «438»: объект не поддерживает это свойство или метод
и указывает на строку с .Name = ColumnCode.Value
. Есть идеи, что не так с этим кодом?
Sub CreateNamedRange(FirstBodyCell As Range, ColumnCode As Range)
With ActiveWorkbook.Names
.Name = "col_" & ColumnCode.Value
.RefersToR1C1 = "=Offset(" & FirstBodyCell & ",0,0," & _
"COUNTA(" & Columns(FirstBodyCell.Column) & ")-COUNTA(" & _
Range(Cells(1, FirstBodyCell.Column), FirstBodyCell.Offset(-1, 0)) & _
"),1)"
End With
End Sub
решение1
Workbook.Names
— это свойство, которое создает Names
класс коллекции, который предоставляет такие члены, как Add
, Count
, Parent
, и Item
.
Объект Names
не имеет Name
свойства или RefersToR1C1
члена (отсюда ошибка 438 — член/свойство не поддерживается/не представлено объектом).
Вы хотите вызвать Add
член этого объекта - эта функция принимает в качестве параметров значения, которые вы пытаетесь там назначить. Также .Address
вернет адрес, который не в формате R1C1. Попробуйте использовать RefersTo
вместо RefersToR1C1
.
With ActiveWorkbook.Names.Add( _
Name:="col_" & ColumnCode.Value, _
RefersTo:="=Offset(" & FirstBodyCell & ",0,0," & _
"COUNTA(" & Columns(FirstBodyCell.Column) & ")-COUNTA(" & _
Range(Cells(1, FirstBodyCell.Column), FirstBodyCell.Offset(-1, 0)) & _
"),1)")
'the With block variable is the Name object that was created+added to the Names collection:
Debug.Print .Name
End With
ПримечаниеСкотт Крейнеруказывает на то, что вы, вероятно, захотите использовать .Address
объекты, Range
которые вы там предоставляете, поэтому фактическое значение RefersToR1C1
будет:
RefersTo:="=Offset(" & FirstBodyCell & ",0,0," & _
"COUNTA(" & Columns(FirstBodyCell.Column).Address & ")-COUNTA(" & _
Range(Cells(1, FirstBodyCell.Column), FirstBodyCell.Offset(-1, 0)).Address & _
"),1)")