首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel UDF在不需要的第二次调用中采用空参数

问Excel UDF在不需要的第二次调用中采用空参数
EN

Stack Overflow用户
提问于 2018-12-26 22:02:31
回答 2查看 157关注 0票数 1

在我的项目中,一个UDF的参数是另一个UDF函数的结果。

例如:

代码语言:javascript
复制
GetPeriod(string name, string date) {
           // logic 
          }

Data(string name, string period) {
          // logic
          }

我在两个不同的单元中使用这些UDF

代码语言:javascript
复制
cell a1: =GetPeriod("KMP", "27-12-18")
cell a3: =Data(a$1,"KMP")

我使用一个UDF (GetPeriod)的结果作为另一个UDF(Data)的参数。

这里的问题是数据自定义函数被触发了两次:一次是实际结果,另一次是单元格A1的空值。

我尝试将计算模式设置为手动,但它仍然被调用两次。

这种设计有没有可能有问题,或者有没有办法在UDF中设置优先级,以便Excel知道首先触发哪个UDF?

EN

回答 2

Stack Overflow用户

发布于 2018-12-26 23:24:38

我不确定VBA代码如何转换为c# for Excel,所以我将尝试给出一个全面的解释/示例。

在VBA中,将excel单元格(或区域)的引用传递给UDF主要有两种方法。

使用字符串参数(即,Data(name as String))

  • Using a Range Object参数(即,Data(name as Object))

或更广义地说,

  1. ))的Data(name as Range)

当使用字符串参数时,通常通过Worksheet("Name").Range("String Param")).Value在代码中访问范围的值。使用object参数时,代码通常类似于RangeParam.Value。

有时,范围被硬编码到UDF中或被UDF间接引用。我会避免这样做;特别是如果该范围包含一个公式。

当Excel进行计算时,它执行多个步骤。

  1. 在每个单元格中启动计算以确定范围参数。(这用于以正确的顺序确定依赖关系树,并按确定的顺序对最终计算进行dependencies.)
  2. Create。

从这里要理解的重要事情是:

如果某个范围是通过字符串参数引用的,则Excel可能无法理解计算中引用的范围的dependency.

  • If,但硬编码、间接引用或未作为参数传递。

  • 将无法理解UDF将根据其运行次数而不同的结果,则将出现意外结果(来自Excel的多步dependency-determinations).

其他一些注意事项:

如果在UDF中出现错误,那么在工作表中是否使用该UDF或是否通过其他代码调用它之间,处理方式可能会略有不同。

我认为您无法阻止Excel运行两次计算,因为这是它确定依赖项的方式的一部分(除非我完全误解了您所写的内容)。但是,我也希望使用空值A1的计算将在将最终计算值与实际结果进行之前进行。如果第二个(最终)计算结果是带有空白A1的结果,那么我不知道该告诉你什么,除了检查在UDF中引用的所有单元格/范围是否都作为参数对象传递到该UDF中。

票数 1
EN

Stack Overflow用户

发布于 2018-12-26 23:52:47

在将自定义项插入到单元格A1之前,请确保单元格A3为空。调用"Data“UDF的唯一方法是在要添加它的工作表中已经存在”Data“UDF。需要说明的是,如果单元格A3中没有公式,那么就不可能调用"Data“自定义函数。但是,通过在单元格A1中插入"Period“UDF来更改该值将触发单元格A3中的公式重新计算,因为传递到该单元格中的一个参数刚刚被更改。另一种选择是只需要单元格中的值,而不需要实际的UDF。在这种情况下,只需使用"Data“和"Period”函数设置单元格的".Value2“,将"Period”值作为函数传递给"Data“函数。

代码语言:javascript
复制
Range rngPeriod; //Set to cell "A1"
Range rngDate; //Set to cell "A3"
rngPeriod.Value2 = GetPeriod("KMP", "27-12-18");
rngData.Value2 =Data(GetPeriod("KMP", "27-12-18"),"KMP");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53933121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档