如何使用公式在 VBA 中创建命名范围(运行时错误 438)

如何使用公式在 VBA 中创建命名范围(运行时错误 438)

我正在尝试使用 VBA 创建一个命名范围。FirstBodyCellColumnCode都是单个单元格。我希望命名范围最终被定义为如下所示的内容(取决于所在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的成员。ParentItem

对象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)")

相关内容