VBA项目工作簿和从彼此复制的工作表在按";时显示错误的单元格值;“立即计算”;

VBA项目工作簿和从彼此复制的工作表在按";时显示错误的单元格值;“立即计算”;,vba,user-defined-functions,worksheet,Vba,User Defined Functions,Worksheet,我有一个模板工作簿,由相互复制的相同工作表组成。我在一个VBA项目中有大约10个函数,我在每个工作表上使用这些函数。然后,我将模板保存为启用宏的工作簿,并将其填写。我已经做了两次,所以我现在有两个工作簿,比如workbookA.xlsm和workbookB.xlsm,它们直接来自该模板。每个工作表都有许多分组列,即可以通过在屏幕左侧顶部切换+或-符号隐藏的列。我已将计算模式设置为手动。我正在使用Excel2007 我的一个函数叫做SUM_TOTAL(如下所示),它接受2个范围和一个字符串,如果字

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

我的一个函数叫做SUM_TOTAL(如下所示),它接受2个范围和一个字符串,如果字符串在第一个范围内,则将第二个范围的项目相加

我在计算过程中遇到了问题,如果我使用自动计算或按下“立即计算”,则活动工作表将计算正常,但许多其他相同的工作表将给出与给定函数SUM_TOTAL的活动工作表相同的值。有些工作,有些不工作,我认为这与并非每次都计算所有单元格的事实有关。这对我来说意味着这些表并不是完全独立的,但我看不到它们之间有任何联系

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

我们将非常感谢您的帮助,请尽快

非常感谢,S

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

如果希望UDF函数每次更新,即使输入参数(amount\u type、amount\u type\u列、range\u to\u sum)没有更改

  • 您可以按Ctrl+Alt+f9完全重新计算所有函数,也可以在vba中进行
    Application.CalculateFull
    或更强大的Crtl+Shift+Alt+F9/
    Application.CalculateFullRebuild

  • (请谨慎使用,这会使您的函数在工作表中发生更改时重新计算) 您应该通过添加
    Application.Volatile
    中的
    SUM\u TOTAL
    函数中的任意一行


  • 谢谢你的回答。我已经尝试了所有这些方法,但仍然存在一个问题,即每当在非活动工作表(即,当您按下“立即计算”时,您所在的工作表)上计算SUM_TOTAL函数时,它仍然是从活动工作表中引用的。好消息是我已经解决了这个问题:在SUM_TOTAL中,我引用了单元格(cell.Row,range_to_SUM.Column).Value,它总是引用活动工作表,而不是正在计算的工作表,所以我现在将它改为cell.Offset(0,(range_to_SUM.Column-cell.Column)).Value