Excel 2013:在计算不同工作表上的单元格时,计算特定工作表重置的单元格

时间:2016-10-03 23:32:00

标签: excel vba excel-vba excel-formula excel-2013

Excel 2013

我在这个工作簿中有3个工作表,它是高度格式化的,我使用了我在VBA中编码的自定义公式,它使用Application.Volatile,因此每次输入新数据时它都会自动刷新计算。

我的团队已经上下格式化了这个工作簿,并创建了一个包含公司财务的巨大跟踪器。问题是,现在当我们打开工作簿并点击f9 /加载计算表单功能时,只有选定的工作表将根据该表单中的参考单元格进行更新和计算。

它应该这样做,但问题出在其他两个标签内(注意总共有3个),具有公式的单元格将恢复为当前不适用的全零或旧数据。当您选择最初未选中的其他两个选项卡中的一个并按f9 / load calculate sheet函数时,具有曾经具有零/旧数据的函数的单元格将根据单元格引用的新值进行更新,并且工作良好。

当我们切换标签并重新初始化f9 /计算工作表功能时,它会继续执行此操作,当前未选中的其他两个选项卡将重置并显示全部为零或旧数据。我一直在谷歌搜索并寻找解决方案,没有任何工作。

ViewModel

1 个答案:

答案 0 :(得分:1)

您需要删除所有ActiveSheet引用,并将其替换为对包含调用UDF的公式的工作表的引用

Function RedFinder(MyCellColumn As Integer, MyOffset As Integer, MonthCheck As Integer, YearCheck As Integer)
    Application.Volatile

    Dim MyMoneyValue As Variant 'Single holds a decimal variable
    Dim MyAnswerString As String
    Dim sht As Worksheet, c As Range, MyCellRow As Long

    Set sht = Application.Caller.Parent '<<<<    or use Application.ThisCell.Parent

    MyMoneyValue = CDec("0.0")

    For MyCellRow = 2 To sht.Cells(Rows.Count, 1).End(xlUp).Row
        Set c = sht.Cells(MyCellRow, MyCellColumn)
        If IsDate(c.Value) Then
            If Month(c.Value) = MonthCheck And Year(c.Value) = YearCheck Then    'checks if month and date match
                If IsNumeric(c.Offset(0, MyOffset)) Then
                    If c.Offset(0, MyOffset).Font.Color = 255 Then
                        MyMoneyValue = MyMoneyValue + c.Offset(0, MyOffset)
                    End If
                End If
            End If
        End If
    Next MyCellRow

    RedFinder = MyMoneyValue
End Function