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