Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Excel VBA范围方法无法从函数调用开始工作_Excel_Vba_User Defined Functions - Fatal编程技术网

Excel VBA范围方法无法从函数调用开始工作

Excel VBA范围方法无法从函数调用开始工作,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我正在尝试开发一个自定义VBA函数来处理范围,即从列表中删除重复值,并将唯一值列表放置在工作表的特定列中。我使用自定义函数调用的原因是,我希望在原始列表中添加新条目时,可以随时更新“唯一值”列表 当我将代码作为子例程手动运行时(例如,仅运行下面的子RemovedUpplicateValues()段),我可以使代码正常工作。但是,当通过工作簿从自定义函数调用它时(例如,通过在工作表单元格中输入=ManageLists()),在尝试使用其中一种范围方法的第一个实例中,即在NewList.Value2

我正在尝试开发一个自定义VBA函数来处理范围,即从列表中删除重复值,并将唯一值列表放置在工作表的特定列中。我使用自定义函数调用的原因是,我希望在原始列表中添加新条目时,可以随时更新“唯一值”列表

当我将代码作为子例程手动运行时(例如,仅运行下面的
子RemovedUpplicateValues()
段),我可以使代码正常工作。但是,当通过工作簿从自定义函数调用它时(例如,通过在工作表单元格中输入
=ManageLists()
),在尝试使用其中一种范围方法的第一个实例中,即在
NewList.Value2=OriginalList.Value2
行,代码将不做任何操作而退出

函数ManageLists()为双精度
调用RemovedUpplicateValues
端函数
子RemovedUpplicateValues()
暗淡原始列表,新列表为范围
设置原始列表=工作表(“应用程序4输入”)。范围(“A4:A503”)
Set NewList=工作表(“放牧组粪便计算器”)。范围(“CG4:CG503”)
NewList.Value2=OriginalList.Value2
NewList.RemoveDuplicates列:=数组(1)
端接头

您不能以这种方式使用自定义项。摘自优秀网站:

用户定义函数(或UDF)是一个函数过程,通常(但不一定)接受一些输入并返回结果。UDF只能向调用它的单元格返回一个值——它不能修改任何单元格的内容或格式,也不能修改Excel的操作环境。如果试图更改任何内容,函数将立即终止,并向调用单元格返回#VALUE错误


似乎每次工作表上的值发生变化时,您都希望执行函数,因此您应该使用
App 4 Input
工作表的事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    'if a value in column 1 (A:A) changes
    If Target.Column = 1 Then
        Call RemoveDuplicateValues
    End If
End Sub

你不能以那种方式使用UDF。摘自优秀网站:

用户定义函数(或UDF)是一个函数过程,通常(但不一定)接受一些输入并返回结果。UDF只能向调用它的单元格返回一个值——它不能修改任何单元格的内容或格式,也不能修改Excel的操作环境。如果试图更改任何内容,函数将立即终止,并向调用单元格返回#VALUE错误


似乎每次工作表上的值发生变化时,您都希望执行函数,因此您应该使用
App 4 Input
工作表的事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    'if a value in column 1 (A:A) changes
    If Target.Column = 1 Then
        Call RemoveDuplicateValues
    End If
End Sub

你的代码似乎适合我,请检查你的工作表名称App 4输入和计算器,也许你做了一个typo@Dorian您是否如所述“在工作表单元格中输入=ManageLists()”?您的代码似乎对我有效。请检查您的工作表名称App 4输入和计算器可能您做了typo@Dorian是吗如前所述“在工作表单元格中输入=ManageLists()”?