【发布时间】:2020-06-22 09:24:18
【问题描述】:
我在 VBA 模块中开发了一个用户定义函数 (UDF),它可以用于其目的。 但是,当我在另一个打开的工作簿中更改与主工作簿完全无关的任何内容时,我的 mai 工作簿中使用此 UDF 的所有单元格值都将被删除。然后我必须让 Excel 再次计算这些单元格。
为什么会这样?我可以防止吗?我需要在该工作簿中进行这种“实时”计算。任何提示表示赞赏。
如果有帮助,请查看以下代码:
Private Function CalculateAcrossAmounts(iHeaderRow As Integer, rngRow As Range, Optional VolatileParameter As Variant) As Double
Call declareVariables
Application.Volatile
CalculateAcrossAmounts = 0
For i = iColStart To lngLastCol
If wsScopingMatrix.Cells(rngRow.Row, i) <> "" And wsScopingMatrix.Cells(rngRow.Row, i) <> 0 Then
CalculateAcrossAmounts = CalculateAcrossAmounts + 1
End If
Next i
End Function
编辑:子 DeclareVariables 的代码
Sub declareVariables()
Set wb = ThisWorkbook
Set wsScopingMatrix = wb.Sheets("GA_Scoping_Matrix")
Set wsMasterData = wb.Sheets("MasterData")
iColLabel = 1 'Spalte, wo TA/TR eingetragen wird
iRowCategory = 12 'Reihe, wo die Kategorien ausgewählt werden
iRowHeader = 13 'Reihe wo die Header (Entities) sind
iColStart = 11 '9
iColxGroupMateriality = 6
dblGroupMateriality = wsScopingMatrix.Range("rngGroupMateriality")
lngLastRow = getLastRow(wsScopingMatrix, 2)
lngLastCol = getLastCol(wsScopingMatrix, iRowHeader)
For i = 1 To lngLastRow
If wsScopingMatrix.Cells(i, iColLabel) = "TA" Then iRowTA = i
If wsScopingMatrix.Cells(i, iColLabel) = "TR" Then iRowTR = i
If wsScopingMatrix.Cells(i, iColLabel) = "OB" Then iRowOB = i
Next i
clrZentralGepruefterAccount = wsMasterData.Range("A3").Interior.Color
clrFullScopeAudit = wsMasterData.Range("A4").Interior.Color
clrAuditOfAccountBalance = wsMasterData.Range("A5").Interior.Color
clrSpecifiedAuditProcedures = wsMasterData.Range("A6").Interior.Color
clrHighlightBenchmarkAccount = wsMasterData.Range("A11").Font.Color
End Sub
在另一个工作簿中更改之前:
在另一个工作簿中更改后:
【问题讨论】:
-
declareVariables的代码是什么? -
@Rory 在我的帖子中查看编辑。
-
我看不到那里的代码有任何明显的问题。当函数重新计算时,您是否已调试检查 source 单元格的值是什么?
-
我想到了你的问题,还有另一个 UDF 会影响那个 UDF,我没有明确指定单元格的工作表。我找到了问题!
标签: excel vba user-defined-functions