我有一个可以从我的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 回答
函数(UDF)有一个作用:计算一个值并将该值返回给调用它的单元格(或公式/表达式) .
这是一个功能:
您可以在工作表单元格中使用它,如下所示:
并且每次Excel重新计算该单元格's value, it calls the UDF, making the cell'的值时都会读取
Hello, dsdavidson
.功能没有副作用 . 函数不会修改其他单元格 . 函数接受输入,处理并输出结果 .
你做错了什么,使用UDF就好像它是一个宏 .
将
Function
更改为Sub
,并且不要't call it from within a cell. Make a button to call it instead. Or whatever rocks your boat. But you can' t有一个单元格公式,每次重新计算时都会将工作表添加到工作簿中 .宏需要
Public
和无参数 . 所以你选择'll want to take your optional parameter value from a specific cell, or display a form that lets the user pick from a list of available opened workbooks - and then call your procedure and pass the user'作为参数 .很可能宏代码最终可能看起来像这样(YMMV):
您无法通过用户定义的功能添加工作表 . 以下是用户定义函数的限制 .
由工作表单元格中的公式调用的用户定义函数无法更改Microsoft Excel的环境 . 这意味着这样的功能不能执行以下任何操作:
1)在电子表格中插入,删除或格式化单元格 . 2)更改另一个单元格的值 . 3)移动,重命名,删除或向工作簿添加工作表 . 4)更改任何环境选项,例如计算模式或屏幕视图 . 5)将名称添加到工作簿 . 6)设置属性或执行大多数方法 .
有关详细信息,请访问此站点... https://support.microsoft.com/en-in/help/170787/description-of-limitations-of-custom-functions-in-excel