Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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,我对VBA语句工作表.Calculate很感兴趣。在我看来,当使用Evaluate语句的自定义函数引用同一工作簿中另一个工作表上的单元格时,它似乎无法正确使用该函数 在表1中,我有A列,其中只有简单的数字 同一工作簿C列中的Sheet2在A列单元格中有基本表达式,如A1+A2等 我在VBA模块中有这个自定义函数 Function MyEval(Val1 As String) Application.Volatile MyEval = Evaluate(Val1) End Fun

我对VBA语句工作表.Calculate很感兴趣。在我看来,当使用Evaluate语句的自定义函数引用同一工作簿中另一个工作表上的单元格时,它似乎无法正确使用该函数

在表1中,我有A列,其中只有简单的数字

同一工作簿C列中的Sheet2在A列单元格中有基本表达式,如A1+A2等

我在VBA模块中有这个自定义函数

Function MyEval(Val1 As String)
    Application.Volatile
    MyEval = Evaluate(Val1)

End Function
我把这个公式
=MyEval(Sheet2!C1)
放在Sheet1的B1中,然后向下拖动它。 这是第一次很好地工作。它接受Sheet2中的表达式:C1将其传递给MyVal,在内部计算并返回结果

问题是当我在Sheet2中编辑字符串表达式时,整个公式返回0。我需要按表1上的F9重新计算

我已将
应用程序.Volatile
放在MyVal和
工作表(“Sheet1”)中。在Sheet2的工作表更改事件中计算

但它仍然不起作用。使其工作的唯一方法是按活页1上的F9

这是预期的行为吗?我错过了什么吗。当有工作表更改事件且公式引用另一工作表上的范围时,如何使用Evaluate语句在VBA中重新计算自定义公式

如果参考在同一张表中,则无问题。不过效果不错。我有Excel 2013。谢谢


问题在于您的代码正在调用
应用程序。请评估在活动工作表上下文中起作用的
。如果要在函数所在的工作表上下文中对其进行求值,应使用
工作表。求值方法如下:

Function MyEval(Val1 As String)
    Application.Volatile
    MyEval = Application.Caller.Worksheet.Evaluate(Val1)

End Function

问题是您的代码正在调用
应用程序。请评估在活动工作表上下文中起作用的
。如果要在函数所在的工作表上下文中对其进行求值,应使用
工作表。求值方法如下:

Function MyEval(Val1 As String)
    Application.Volatile
    MyEval = Application.Caller.Worksheet.Evaluate(Val1)

End Function

很好地解释了VBA开发人员需要随时注意的鉴定任务…很好地解释了VBA开发人员需要随时注意的鉴定任务。。。