Excel自定义项对可变工作表上的范围求和
这是我在这里的第一篇文章,所以我会尽我最大的努力让自己尽可能清楚 我已经确定UDF是正确的解决方案,但这主要是因为我不知道什么内置函数可以工作 我的工作簿一开始有两张表:“摘要表”和“{System Template}”。在Summary Sheet上,我创建了一个系统列表,从该列表中我有一些代码,可以使用{System Template}生成新的工作表,并根据列表中的值命名工作表,这很好。在汇总表上包含系统名称的单元格旁边的单元格中,我尝试对其各自表上每个不同系统的“Q:Q”范围内的值求和。范围中唯一更改的部分是数据来源的图纸名称。这就是我遇到麻烦的地方。我得到一个#值错误,我不知道如何找出问题所在。通常情况下,我会使用内置的公式评估工具,但对于UDF来说它是无用的。任何帮助都将不胜感激Excel自定义项对可变工作表上的范围求和,excel,udf,vba,Excel,Udf,Vba,这是我在这里的第一篇文章,所以我会尽我最大的努力让自己尽可能清楚 我已经确定UDF是正确的解决方案,但这主要是因为我不知道什么内置函数可以工作 我的工作簿一开始有两张表:“摘要表”和“{System Template}”。在Summary Sheet上,我创建了一个系统列表,从该列表中我有一些代码,可以使用{System Template}生成新的工作表,并根据列表中的值命名工作表,这很好。在汇总表上包含系统名称的单元格旁边的单元格中,我尝试对其各自表上每个不同系统的“Q:Q”范围内的值求和。范
Function FrictionSum(rngInput As Range)
Dim rngCell, rngDomain As Range
Dim strName As String
FrictionSum = 0
'FrictionSum = rngInput.Value
Set rngDomain = Sheets(strName).Range("Q:Q")
For Each rngCell In rngDomain
FrictionSum = FrictionSum + rngCell.Value
Next rngCell
End Function
如公式所述:
=SUM(INDIRECT("'" & A1 & "'!Q:Q"))
你应该做你想做的
工作表函数Sum将执行您想要的操作,而无需迭代。
还要确保将该值指定给strName
代码:
如公式所述:
=SUM(INDIRECT("'" & A1 & "'!Q:Q"))
你应该做你想做的
工作表函数Sum将执行您想要的操作,而无需迭代。
还要确保将该值指定给strName
代码:
您正在定义一个
函数
,但您没有返回任何内容,您可以使用子函数
,或者您需要将其定义为函数摩擦和(rngInput as Range),例如,只要长度
。此外,您正在传递rngInput
,但在您的UDF中没有对其进行任何处理?因此公式=SUM(间接(“'A1&'!Q:Q”)
其中A1是工作表名称,但不起作用?您也没有为strName赋值,Excel应该猜测吗?您正在定义一个函数
,但您没有返回任何内容,您可以只使用子函数
,或者您需要将其定义为函数摩擦和(rngInput as Range),例如,只要
。此外,您正在传递rngInput
,但在您的UDF中没有对其进行任何处理?因此公式=SUM(INDIRECT(“'A1&'!Q:Q”)
其中A1是工作表名称,但不起作用?您也没有为strName赋值,Excel应该猜测吗?我最初尝试将SUM与INDIRECT一起使用,但出于这样或那样的原因,它对我不起作用(可能遗漏了一句话)。现在可以了。在UDF中,我没有指定strName的唯一原因是因为我正在进行故障排除。我将FrictionSum分配给rngInput.Value,然后在它正常工作时注释掉它,我只是没有重新分配strName。至于不返回,为什么我的for Each循环中的FrictionSum不能用作返回值呢?对不起,我错过了。应该有。也许这只是一个级联,修复一个错误以创建另一个错误。但这应该更快。我最初尝试使用SUM和INDIRECT,但出于这样或那样的原因,它对我不起作用(可能缺少引用)。现在可以了。在UDF中,我没有指定strName的唯一原因是因为我正在进行故障排除。我将FrictionSum分配给rngInput.Value,然后在它正常工作时注释掉它,我只是没有重新分配strName。至于不返回,为什么我的for Each循环中的FrictionSum不能用作返回值呢?对不起,我错过了。应该有。也许这只是一个级联,修复一个错误以创建另一个错误。但这应该更快。