Excel 2013
我在这个工作簿中有3个工作表,它是高度格式化的,我使用了我在VBA中编码的自定义公式,它使用Application.Volatile,因此每次输入新数据时它都会自动刷新计算。
我的团队已经上下格式化了这个工作簿,并创建了一个包含公司财务的巨大跟踪器。问题是,现在当我们打开工作簿并点击f9 /加载计算表单功能时,只有选定的工作表将根据该表单中的参考单元格进行更新和计算。
它应该这样做,但问题出在其他两个标签内(注意总共有3个),具有公式的单元格将恢复为当前不适用的全零或旧数据。当您选择最初未选中的其他两个选项卡中的一个并按f9 / load calculate sheet函数时,具有曾经具有零/旧数据的函数的单元格将根据单元格引用的新值进行更新,并且工作良好。
当我们切换标签并重新初始化f9 /计算工作表功能时,它会继续执行此操作,当前未选中的其他两个选项卡将重置并显示全部为零或旧数据。我一直在谷歌搜索并寻找解决方案,没有任何工作。
ViewModel
答案 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