工作表。添加UDF不工作

时间:2017-03-31 17:59:51

标签: excel vba excel-vba

我有一个可以在我的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()

2 个答案:

答案 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