.png)
Estou tentando criar um intervalo nomeado usando VBA. Ambos FirstBodyCell
e ColumnCode
são células únicas. Quero que o intervalo nomeado seja eventualmente definido como algo parecido com isto (dependendo da coluna em que FirstBodyCell
está):
=Offset(Sheet1!$E$8,0,0,COUNTA(Sheet1!$E:$E)-COUNTA(Sheet1!$E$1:$E$7),1)
Usando o sub abaixo aumenta
Erro em tempo de execução '438': o objeto não oferece suporte a esta propriedade ou método
e aponta para a linha com .Name = ColumnCode.Value
. Alguma idéia do que há de errado com esse código?
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
Responder1
Workbook.Names
é uma propriedade que produz uma Names
classe de coleção, que expõe membros como Add
, Count
, Parent
e Item
.
Um Names
objeto não possui uma Name
propriedade ou um RefersToR1C1
membro (daí o erro 438 - membro/propriedade não é suportado/exposto pelo objeto).
Você deseja invocar o Add
membro desse objeto - essa função leva como parâmetros os valores que você está tentando atribuir a ele. Além disso, .Address
retornará um endereço que não está no formato R1C1. Tente usar RefersTo
em vez de 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
ObservaçãoScott Craneraponta que você provavelmente desejará usar os .Address
objetos Range
que está fornecendo lá, então o valor real RefersToR1C1
seria:
RefersTo:="=Offset(" & FirstBodyCell & ",0,0," & _
"COUNTA(" & Columns(FirstBodyCell.Column).Address & ")-COUNTA(" & _
Range(Cells(1, FirstBodyCell.Column), FirstBodyCell.Offset(-1, 0)).Address & _
"),1)")