Vba 尝试调用函数时出现名称错误

Vba 尝试调用函数时出现名称错误,vba,Vba,我还在学习VBA,所以我可能会犯很多非常基本的错误。目前,我正在尝试制作一个可以计算表中行数的宏。此sub工作正常(使用名为“Tab”的表) 但是,当我尝试将此子函数转换为函数以便可以使用表的名称作为变量调用它时,在单元格中写入“=AddRowTableFunction(Tab)”时会出现名称错误 Function AddRowTableFunction(TableName) ActiveSheet.ListObjects(TableName).ListRows.Add (3) End Func

我还在学习VBA,所以我可能会犯很多非常基本的错误。目前,我正在尝试制作一个可以计算表中行数的宏。此sub工作正常(使用名为“Tab”的表)

但是,当我尝试将此子函数转换为函数以便可以使用表的名称作为变量调用它时,在单元格中写入“=AddRowTableFunction(Tab)”时会出现名称错误

Function AddRowTableFunction(TableName)
ActiveSheet.ListObjects(TableName).ListRows.Add (3)
End Function
我知道这只是一个类型的问题,但我就是找不到正确的方法

谢谢。

您应该试试: =AddRowTableFunction(“选项卡”)

你写道: =AddRowTableFunction(选项卡)

那不好

目前,我正在尝试制作一个可以计算表中行数的宏

首先,这不是您的代码所做的。您的代码正在向表中添加一行。可以使用
ListRows.Count
访问行数

当我试着将这个sub转换成一个函数,这样我就可以用表名作为变量来调用它

您不需要使用
函数
来包含变量。
Sub
函数
之间的区别在于
函数
返回变量,而
Sub
不返回变量(即
函数
将变量返回给使用它的代码)。
Sub
s和
Function
s都可以接受变量

返回给定表中行数的
函数
如下所示:

Function AddRowTableFunction(TableName As String)
    AddRowTableFunction = ActiveSheet.ListObjects(TableName).ListRows.Count
End Function
对于添加行,您可能会使用
,因为添加行的操作不会返回任何信息:

Sub AddRowTable(TableName As String)
    ActiveSheet.ListObjects(TableName).ListRows.Add
End Sub

最后,正如Apafey所指出的,在公式中使用
函数时,您需要编写
“Tab”
(在引号中),而不仅仅是
Tab
“Tab”
告诉Excel传递单词Tab的文本,而
Tab
告诉Excel查找名为
Tab
的区域,该区域可能不存在。

正如FaneDuru所说,UDF函数不能更改其他单元格,这就解释了错误)。塞纳克斯

UDF函数仅在调用它的单元格中返回。它不修改其他范围。因此,如果它与sub一起工作,但不与函数一起工作,则它是完全正常的?是的,它是。您可以使用事件(例如,工作表更改)来触发现有函数。我的意思是,您可以在特定范围内更改一个值,并配置这样的事件来调用函数,而不是从一个单元格调用它(UDF不允许更改其他单元格,调用来自该单元格的单元格除外)。如果使用按钮不方便。确定。功能可能不是实现这一目标的最佳方式。要在单元格中使用的VBA函数应返回一个值,并且不更改工作表。通常,您需要在函数末尾添加一行“AddRowTableFunction=…”,以在单元格中获得结果。或者,它可以在您编写代码时运行,然后删除活动单元格的内容,这样您就可以确保它以后不会更改您的工作表。我认为我需要使用一个函数,因为如果我使用子函数编写代码,那么在我编写“=AddRowTable”(“显然键入=AddRowTable”(“Tab1”)时,“AddRowTable”不会出现给我一个错误…顺便说一下,正如我对Apafey说的,write=AddRowTableFunction(“Tab1”)编辑:我想我刚刚理解了发生的事情。我试图在单元格中使用函数,但是因为我的函数没有返回任何东西,我猜是错误,所以我应该使用一个sub并使用一个按钮。不,它没有。
#NAME!
意味着找不到函数,因为显然是您将它在工作表模块中,而不是。更改工作表会让您。
Sub AddRowTable(TableName As String)
    ActiveSheet.ListObjects(TableName).ListRows.Add
End Sub