我有一个可以在我的excel工作簿中的单元格内调用的UDF。我需要它在工作簿的末尾添加一个工作表。我在我的VBA脚本中多次使用过sheet.add,但从不在一个从单元格内部调用的函数中,这显然会导致一些问题。
该函数接受工作簿的文件路径的可选参数,在该文件路径中添加工作表,如果用户将其留空,我希望默认为活动工作簿。
以下是相关代码......我做错了什么?
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
正在从单元格调用该函数 = onesheet()
答案 0 :(得分:3)
函数(UDF)有一个作用:计算一个值并将该值返回给调用它的单元格(或公式/表达式)。
这是一个功能:
Public Function Foo(ByVal bar As String) As String
Foo = "Hello, " & bar
End Function
您可以在工作表单元格中使用它:
=Foo("dsdavidson")
每次Excel重新计算该单元格的值时,它都会调用UDF,使单元格的值读为Hello, dsdavidson
。
功能没有副作用。功能不会修改其他单元格。函数接受输入,处理并输出结果。
你做错了什么,就像使用UDF一样使用UDF。
更改Function
的{{1}},不要在单元格内调用它。按一下按钮来调用它。或者不管你的船是什么。但是,您无法在每次重新计算时都将工作表添加到工作簿中。
宏需要Sub
且无参数。因此,您希望从特定单元格中获取可选参数值,或者显示允许用户从可用打开的工作簿列表中选择的表单 - 然后调用您的过程并将用户的选择作为一个参数。
宏代码很可能最终看起来像这样(YMMV):
Public
答案 1 :(得分:3)
您无法通过用户定义的功能添加工作表。 以下是用户定义函数的限制。
工作表单元格中的公式调用的用户定义函数无法更改Microsoft Excel的环境。这意味着这样的功能不能执行以下任何操作:
1)在电子表格中插入,删除或格式化单元格。 2)更改另一个单元格的值。 3)移动,重命名,删除或向工作簿添加工作表。 4)更改任何环境选项,例如计算模式或屏幕视图。 5)将名称添加到工作簿。 6)设置属性或执行大多数方法。
有关详细信息,请访问此网站... https://support.microsoft.com/en-in/help/170787/description-of-limitations-of-custom-functions-in-excel