.png)
Estoy intentando crear un rango con nombre usando VBA. Ambos FirstBodyCell
y ColumnCode
son células individuales. Quiero que el rango nombrado eventualmente se defina como algo similar a esto (dependiendo de en qué columna se FirstBodyCell
encuentre):
=Offset(Sheet1!$E$8,0,0,COUNTA(Sheet1!$E:$E)-COUNTA(Sheet1!$E$1:$E$7),1)
Usar el sub siguiente aumenta
Error de tiempo de ejecución '438': el objeto no admite esta propiedad o método
y apunta a la línea con .Name = ColumnCode.Value
. ¿Alguna idea de qué está mal con este 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
Respuesta1
Workbook.Names
es una propiedad que produce una Names
clase de colección, que expone miembros como Add
, Count
, Parent
y Item
.
Un Names
objeto no tiene una Name
propiedad o un RefersToR1C1
miembro (de ahí el error 438: el objeto no admite/expone el miembro/propiedad).
Desea invocar al Add
miembro de ese objeto; esa función toma como parámetros los valores que está intentando asignar allí. Además, .Address
devolverá una dirección que no esté en formato R1C1. Intenta usar RefersTo
en lugar 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
NotaScott Cranerseñala que probablemente querrás usar los .Address
objetos Range
que estás proporcionando allí, por lo que el valor real RefersToR1C1
sería:
RefersTo:="=Offset(" & FirstBodyCell & ",0,0," & _
"COUNTA(" & Columns(FirstBodyCell.Column).Address & ")-COUNTA(" & _
Range(Cells(1, FirstBodyCell.Column), FirstBodyCell.Offset(-1, 0)).Address & _
"),1)")