Excel Power查询、VBA和重新计算:It';这很复杂
我最近开始使用Excel Power Query,从SharePoint检索数据。在我注意到工作表中查找查询结果的某些单元格(都在同一工作簿中)没有得到计算之前,一切都很顺利。值刚刚显示为0。当我选择单元格并按enter键时,单元格重新计算并显示正确的值。计算方法是“除数据表外自动”(我希望翻译正确) 我将问题追溯到我在许多自定义项中使用的特定自定义项,该函数检查范围(或更精确的参数)是否已重新计算,如果未重新计算,则立即退出外部自定义项。这是许多网站上常见的提高性能的建议,我从来没有遇到过任何问题,直到power query出现 似乎有几个可能的解决方案可以追求:Excel Power查询、VBA和重新计算:It';这很复杂,excel,vba,powerquery,Excel,Vba,Powerquery,我最近开始使用Excel Power Query,从SharePoint检索数据。在我注意到工作表中查找查询结果的某些单元格(都在同一工作簿中)没有得到计算之前,一切都很顺利。值刚刚显示为0。当我选择单元格并按enter键时,单元格重新计算并显示正确的值。计算方法是“除数据表外自动”(我希望翻译正确) 我将问题追溯到我在许多自定义项中使用的特定自定义项,该函数检查范围(或更精确的参数)是否已重新计算,如果未重新计算,则立即退出外部自定义项。这是许多网站上常见的提高性能的建议,我从来没有遇到过任何
- 在执行查询后,以某种方式触发完全重新计算和重建。需要某种触发器或事件(我目前不知道)
- 使检查参数是否脏的UDF更智能。根据观察到的行为,我的结论是,包含查询结果的表始终计为dirty(?)。如果是这样,向UDF教授这方面的知识将有所帮助
- 确保查询结果在excel中始终计算为干净
Public Function searchKeyed(target As Range, rowKey As Variant, columnKey As Variant) As Variant
If Not chkRngCalculated(target) Then Exit Function
...
我验证了,如果我注释掉if语句,那么在查询更新时,值确实得到了正确更新
查询的后台更新已关闭。从“除数据表外的自动”切换到“自动”重新计算不会更改所描述的行为
是否有人有过类似的经历并找到了解决方案 如果你让UDF不稳定呢?嗯,那有点用。但是,在点击F9时,并不是所有单元格都被重新计算,只有部分单元格在重新计算时最终计算出所有单元格。然而,将查找函数转换为易失性函数是错误的。这将大大降低性能。而且,这是一个严重的副作用。这意味着我必须将此“修复”应用于所有UDF,并且我维护了相当多的库。所以这不可能是最终的解决方案。如果你让UDF不稳定呢?嗯,那有点用。但是,在点击F9时,并不是所有单元格都被重新计算,只有部分单元格在重新计算时最终计算出所有单元格。然而,将查找函数转换为易失性函数是错误的。这将大大降低性能。而且,这是一个严重的副作用。这意味着我必须将此“修复”应用于所有UDF,并且我维护了相当多的库。所以这不可能是最终的解决办法。
Public Function searchKeyed(target As Range, rowKey As Variant, columnKey As Variant) As Variant
If Not chkRngCalculated(target) Then Exit Function
...