首页 > 解决方案 > 在单元格公式中从当前工作簿执行 VBA 函数得到错误 #name(法语版为 #nom)

问题描述

当我将 VBA 函数用于单元格的公式时,我遇到了一个可能非常简单的问题,我得到单元格内容“#NAME”(未找到函数?而使用该函数(用于测试)的宏正常执行(显示单元格的所需内容,函数的返回值,该函数从完整路径中提取文件名)。

语境 :

我是由过去(12年前)开发的,可能是5万,VBA指令,使用office2003。今天又要用Office365开发一些宏。所以自从这次以来我已经忘记了很多,并且一些功能可能已经改变,这可能会变得欺骗(我需要再次阅读我的旧软件以回忆我所有的知识,但我现在无法访问)

问题

注意:此代码作为示例进行了详细说明

编码

Public Function FNameOf(CellPointed As Range)

Dim CurCell As Range
Dim Text1 As String
Dim Text2 As String

    Set CurCell = CellPointed

    Text1 = CurCell.Value
    Text2 = Mid$(Text1, InStrRev(Text1, "\") + 1, Len(Text1))

    FNameOf = Text2
End Function

Sub DispFileName2()
Dim style, disp, titre
Dim Cursel As Range
    'Cursel = ActiveCell

    disp = FNameOf(ActiveCell)
    style = vbOKOnly
    titre = "Nom du fichier extrait du texte (fullpath) de la cellule courante"

    MsgBox disp, style, titre

End Sub

如果我提交宏 DispFileName2 如果获取带有从路径中提取的文件名的消息,该路径是当前单元格的内容

如果我设置单元格的公式:

=FNameOf(AnotherCell) 'which contains a fullpath to a file

我总是收到错误“#NOM”(法语版),或者我认为是“#NAME”(英文版),好像函数名(ref)在工作簿中未知(未达到代码,a在第一条指令上设置停止)

可能是什么原因?

标签: excelvbafunctionexcel-formula

解决方案


请将您的用户定义函数放置在模块中的某个位置(既不在“ThisWorkbook”中,也不在单个工作表的代码中,例如“Feuil1”)。
您还应该添加结果声明As String
我知道这个例子仅供参考,但你可以缩短它:

Public Function FNameOf(CellPointed As Range) As String
    FNameOf = Mid(CellPointed.Value, InStrRev(CellPointed.Value, "\") + 1)
End Function

推荐阅读