Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 工作表。加载项自定义项不工作_Vba_Excel - Fatal编程技术网

Vba 工作表。加载项自定义项不工作

Vba 工作表。加载项自定义项不工作,vba,excel,Vba,Excel,我有一个自定义项,可以从excel工作簿中的单元格中调用。我需要它在工作簿的末尾添加一个工作表。我在VBA脚本中多次使用sheets.add,但从未在从单元格内部调用的函数中使用过,这显然导致了一些问题 该函数接受一个可选参数作为要在其中添加工作表的工作簿的文件路径,如果用户将此参数留空,我希望默认为活动工作簿 下面是相关代码。。。我做错了什么 Public Function onesheet(Optional filepath As String) Dim wb As Workbook Di

我有一个自定义项,可以从excel工作簿中的单元格中调用。我需要它在工作簿的末尾添加一个工作表。我在VBA脚本中多次使用sheets.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()

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

这是一个函数:

Public Function Foo(ByVal bar As String) As String
    Foo = "Hello, " & bar
End Function
您可以在工作表单元格中使用它,如下所示:

=Foo("dsdavidson")
每次Excel重新计算该单元格的值时,它都会调用UDF,使单元格的值变为
Hello,dsdavidson

功能没有副作用。函数不修改其他单元格。函数接受输入、处理并输出结果

你做错的是,把自定义项当作宏来使用

更改
子函数的
函数
,不要在单元格内调用它。制作一个按钮来调用它。或者任何能让你船摇晃的东西。但是,您不能有一个单元格公式,每次重新计算工作表时,它都会将工作表添加到工作簿中


宏必须是公共的且无参数的。因此,您需要从特定单元格中获取可选参数值,或者显示一个表单,允许用户从可用的打开工作簿列表中进行选择,然后调用您的过程并将用户的选择作为参数传递

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


不能通过用户定义的功能添加图纸。 以下是用户定义函数的限制

由工作表单元格中的公式调用的用户定义函数无法更改Microsoft Excel的环境。这意味着该函数不能执行以下任何操作:

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

有关更多详细信息,请访问此网站。。。

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