3

我有一个模板工作簿,由相互复制的相同工作表组成。我在每个工作表上使用的 VBA 项目中有大约 10 个函数。然后,我将模板保存为启用宏的工作簿并填写。我已经这样做了两次,所以我现在有两个工作簿,比如 workbookA.xlsm 和 workbookB.xlsm,它们直接来自该模板。每个工作表都有很多分组的列,即可以通过屏幕左侧顶部的 + 或 - 号切换来隐藏的列。我将计算模式设置为手动。我正在使用 Excel 2007。

我的一个函数称为 SUM_TOTAL(如下所示),它采用 2 个范围和一个字符串,如果字符串在第一个范围内,则将第二个范围的项目相加。

我在计算过程中遇到问题,如果我有它在自动计算或者如果我按“立即计算”,那么活动工作表将计算正常,但是许多其他相同的工作表将给出与活动工作表相同的值,其中给出了函数 SUM_TOTAL。我认为有些工作有些不工作与并非所有单元格每次都得到计算的事实有关。它向我表明,这些工作表并不完全独立,但我看不出它们有任何联系方式。

我编写了一个宏,它在工作表中循环并执行“计算表”,但我认为这就是“现在计算”的作用?我想了解它,因为其他人最终会使用该模型,我需要知道它是健壮的。

任何帮助将不胜感激,尽快!

非常感谢,

Public Function SUM_TOTAL(amount_type As String, amount_type_column As Range, 
range_to_sum As  Range) As Single

Dim cell As Range

SUM_TOTAL = 0

    For Each cell In amount_type_column

        If cell.Value = amount_type Then

            SUM_TOTAL = SUM_TOTAL + Cells(cell.Row, range_to_sum.Column).Value

        End If

    Next cell

End Function
4

1 回答 1

0

如果您希望 UDF 函数每次都更新,即使输入参数(amount_type、amount_type_column、range_to_sum)没有改变。

  1. 您可以按 Ctrl +Alt + f9 来完全重新计算所有功能,或者在 vba Application.CalculateFull 甚至更强大的 Crtl + Shift + Alt + F9/Application.CalculateFullRebuild

  2. (请谨慎使用,这会使您的函数在工作表发生更改时重新计算)您应该通过在任何行中添加函数来使您的 Application.Volatile函数SUM_TOTAL易变

于 2012-12-13T03:31:47.260 回答