Worksheet.Add在UDF不工作

我有一个UDF,可以从我的Excel工作簿中的单元格中调用。 我需要它在工作簿的末尾添加一个工作表。 我已经多次在我的VBA脚本中使用sheets.add,但从来没有在单元格内调用函数,这显然是造成一些问题。

该函数接受用于添加工作表的工作簿的文件path的可选参数,如果用户将此空白留空,则要将其默认为活动工作簿。

下面是相关的代码…我做错了什么?

Public Function onesheet(Optional filepath As String) Dim wb As Workbook Dim ws As Worksheet If filepath = "" Then Set wb = ActiveWorkbook Set target_ws = wb.Sheets.Add(after:=wb.Sheets(wb.Sheets.Count)) End If 

该函数正在从单元格= onesheets()调用

函数(UDF)有一个angular色:计算一个值并将该值返回给调用它的单元格(或公式/expression式)。

这是一个function:

 Public Function Foo(ByVal bar As String) As String Foo = "Hello, " & bar End Function 

您可以在工作表单元格中使用它,如下所示:

 =Foo("dsdavidson") 

每次Excel重新计算单元格的值时,都会调用UDF,使单元格的值为“ Hello, dsdavidson

函数没有副作用。 函数不会修改其他单元格。 函数进行input,处理并输出结果。

你做错了,就像是一个macros一样使用UDF。

更改您的Function为一个Sub ,而不要从一个单元格内调用它。 让一个button来调用它。 或者不pipe你的船在哪里晃动 但是不能有一个单元格公式,每次重新计算时都会将工作表添加到工作簿中。


macros需要是Public和无参数的。 因此,您需要从特定单元格获取可选参数值,或者显示一个表单,让用户从可用打开的工作簿列表中select – 然后调用您的过程并将用户的select作为parameter passing。

macros代码很可能最终会看起来像这样(YMMV):

 Public Sub AddWorksheet() With New PromptForm .Show If .Cancelled Then Exit Sub OneSheet .SelectedBook End With End Sub 

您不能通过用户定义的function添加工作表。 这是用户定义函数的限制。

由工作表单元格中的公式调用的用户定义的函数不能更改Microsoft Excel的环境。 这意味着这样的function不能做到以下任何一项:

1)在电子表格中插入,删除或格式化单元格。 2)改变另一个单元格的值。 3)移动,重命名,删除或将工作表添加到工作簿。 4)更改任何环境选项,例如计算模式或屏幕视图。 5)将名称添加到工作簿。 6)设置属性或执行大多数方法。

欲了解更多详情,请访问此网站… https://support.microsoft.com/en-in/help/170787/description-of-limitations-of-custom-functions-in-excel