3

我使用这个函数(这是 Excel 2007,文件类型是 *.xlsm)

Public Function CellName(oCell As Range) As Variant
Dim oName As Name
For Each oName In ThisWorkbook.names
  If oName.RefersToRange.Parent Is oCell.Parent Then
    If Not Intersect(oCell, oName.RefersToRange) Is Nothing Then
       CellName = oName.Name
       Exit Function
    End If
  End If
Next
CellName = CVErr(xlErrNA)
End Function

获取单元格的名称。

它工作正常,但可能我删除了一些行并显示错误(所以它循环直到结束,没有找到名称)。对于工作簿中的每个单元格。公式中没有这个单元格是可以的。

我曾经遇到过这个问题,问题是-我不记得确切-有些名字什么都没有。但是现在,当我打开名称管理器时,所有名称都可以,没有一个与其他任何名称相同。

我写了一个宏:

Sub names_delete()
  Dim oName As Variant
  Dim i As Integer
  i = 0
  For i = 1 To ThisWorkbook.names.Count
   oName = ThisWorkbook.names(i).Name
   result = MsgBox(oName, vbYesNo + vbDefaultButton2, "Delete name?")

   If (result = vbYes) Then
     ThisWorkbook.names(i).Delete
     Exit Sub
    End If
  Next
End Sub

显示的第一个名称是“_xlfn.IFERROR”。我不能删除它。这未显示在名称管理器中。

我用谷歌搜索,但唯一的答案是我可以使用 Excel 中不存在的函数,所以除了 2007 Excel 版本之外,但事实并非如此,总是使用 2007,但是,我可能将它保存为 2003,我不记得了。

我的问题是 - 如何更正此函数以使其没有错误,或者如何删除此“_xlfn.IFERROR”名称,或者错误可能在其他地方。

正如我所写,我已经遇到了类似的问题,但我通过修复错误的名称解决了它。这里一切都是正确的(“_xlfn.IFERROR”除​​外)。

编辑

我可以在公式中使用名称,没有问题。

4

3 回答 3

1

名称“_xlfn.IFERROR”是隐藏的,这意味着您无法在 Excel 的本机名称管理器中看到它。您需要先使用第三方解决方案(如 JPK 的名称管理器或 Macabacus 的名称洗涤器)取消隐藏名称。然后,返回 Excel 的本机名称管理器并删除名称。

于 2015-07-21T03:11:38.027 回答
0

我今天也遇到了问题。从我在互联网上读到的内容来看,Windows 的第一个 Excel 2007 没有任何宏/宏编辑器(可怕但......)。这就是为什么例如带有宏的文件必须具有独立的扩展名,而没有宏的文件。尽管如此,他们最终还是通过包括 2003 年的宏观系统来反对抗议,该系统并不完全稳定(尤其是公式)。关于这个_xlfn.XXXXX隐藏名称,它们与2007/2010新功能有关,2003不支持。这意味着如果您想在宏中使用名称,则不能使用表单中带有XXXXX名称的功能。删除后,您必须保存、关闭并重新打开文件才能使隐藏的名称消失。

希望它可以提供帮助。

丹尼斯

于 2014-09-12T10:17:29.513 回答
-1

Option Explicit
Public Function CellName(oCell As Range) As Variant

Dim oName As string
For Each oName In worksheet("sheet1").range("A1:Z65536")
If oName.name = oCell.name

然后 cellname = oName.name '你需要的任何 其他
代码

 exit function 

万一

下一个结束函数

于 2013-05-01T17:41:44.237 回答