【发布时间】:2017-04-05 05:47:51
【问题描述】:
我在电子表格的模块中插入了以下简单函数:
Function CellName(cel As Range) As Variant
Dim nm As Name
For Each nm In Names
If nm.RefersTo = "=" & cel.Parent.Name & "!" & cel.Address Then
CellName = nm.Name
Exit Function
End If
Next
CellName = CVErr(xlErrNA)
End Function
我只想用相邻列中单元格的命名变量填充一列。
奇怪的是,此函数在某些 CELLS 中有效,但在其他 CELLS 中会引发 #N/A 错误。在有名字的单元格中。
谁能帮我理解?我不是 VBA 专家;我确实对这个 Q 做了一些研究,但只找到了比这更复杂的问题的答案。
谢谢。
【问题讨论】:
-
如果您使用的单元格有一个“定义的名称”(并且只有),那么您将获得该名称(如果有多个,则只是它遇到的第一个名称)。如果没有“名称”直接进入此单元格,那么您将获得“
#N/A”。什么细节在这里不起作用? -
这个函数似乎对我有用,它返回引用对象
cel的#N/A 值没有Name。 -
名称可以限定为工作簿或工作表。您没有限定您正在迭代的
Names集合,因此它隐含地指代ThisWorkbook.Names(或ActiveWorkbook.Names,...不确定.. 也可能是ActiveSheet.Names.. 不是隐含的东西不错?) - 是否考虑到这一点?即所有名称都在同一范围内吗? -
Dirk:例如,工作表“model-input”的单元格 D3 的值为 2.25%,并分配了名称
third_pty_sales_costs_pct。在单元格 E3 中,我有 {=cellname(D3)},它产生 #N/A 在同一个工作簿中,在工作表“输入”的单元格 C3 上,值是 588,000,名称是property_size。在单元格 D3 中,公式为 {=cellname(C3)},生成“property_size”。看?我很困惑。但话又说回来,就像我说的,我不是这方面的专家。 -
我会猜测并说它不适用于工作表名称包含空格或其他“奇怪”字符的工作表。在这些情况下,
RefersTo看起来像"='" & cel.Parent.Name & "'!" & cel.Address Then。例如,=model-input!$D$3中的RefersTo会因为-而无效,因此必须使用引号使其有效。