VBA工作表。计算不使用其他工作表上引用表达式的计算
我对VBA语句工作表.Calculate很感兴趣。在我看来,当使用Evaluate语句的自定义函数引用同一工作簿中另一个工作表上的单元格时,它似乎无法正确使用该函数 在表1中,我有A列,其中只有简单的数字 同一工作簿C列中的Sheet2在A列单元格中有基本表达式,如A1+A2等 我在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
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开发人员需要随时注意的鉴定任务。。。