Я использую изменчивую UDF, которая работает в основном так, как и должна. Я передаю ему диапазон и, если значение в этом диапазоне изменяется, он пересчитывается, как и должно быть. Но когда я переключаюсь на другой лист и редактирую, например, ячейку, а затем переключаюсь обратно, я не вижу вывода этого UDF.
Я изменяю значение ячейки на листе, содержащем UDF, или сохраняю файл, он снова показывает вывод UDF. Я также могу сделать
' Refresh all Calculations if Sheet is activated
Private Sub Worksheet_Activate()
Application.CalculateFull
End Sub
Но я не думаю, что это хорошее решение, если оно не является критически необходимым, поскольку лист содержит сотни формул.
Я также проверил UDF # Значение! при переключении листов , что похоже на проблему (без реального ответа).
' Returns Tags-String based on Range/Threshold
Public Function GetTagsString(rngRange As Range) As String
' Define Variables
Dim strTags As String
Dim strTagSeparator As String
Dim strTag As String
Dim intTagRow As Integer
Dim intTagValue As Integer
Dim dblTagMinScore As Double
Dim rngCell As Range
' Initialize Values
intTagRow = Sheets("Locations").Range("TagsRow").Value
dblTagMinScore = Sheets("Settings").Range("TagMinScore").Value
strTagSeparator = Sheets("Settings").Range("TagSeparator").Value
strTags = ""
' Loop through all Cells in Range
For Each rngCell In rngRange
intTagValue = rngCell.Value
strTag = Cells(intTagRow, rngCell.Column).Value
' Include Tag if equal/greater than Tag-Threshold
If (intTagValue >= dblTagMinScore) Then
If (Not strTags = "") Then
' String contains already Tags => append Tag-Separator
strTags = strTags & strTagSeparator & strTag
Else
strTags = strTag
End If
End If
Next rngCell
' Return Tags-String
GetTagsString = strTags
End Function
Я называю этот UDF:
=GetTagsString(INDIRECT(ADDRESS(ROW();COLUMN(TagAmusement);4)):INDIRECT(ADDRESS(ROW();COLUMN(TagFun);4)))
TagAmusement и TagFun называются ячейками. Я знаю, что использование INDIRECT, возможно, не лучшее решение, но по нескольким причинам мне нужно быть таким динамичным. Я делаю это во многих формулах, но без использования UDF и без той же проблемы. Проблема должна что-то делать с UDF, но я не думаю, что это из-за параметров этой функции. Это должно быть связано с заменой другого листа и переключением обратно на исходный лист.
И да, я прочитал некоторые значения из листа, но я также попытался передать их, и это не имеет значения (я также не изменяю (d) их).
Единственное, что работает (на автоматизированной основе):
' Refresh all Calculations if Sheet is activated
Private Sub Worksheet_Activate()
Application.CalculateFull
End Sub
Проблема возникает только в том случае, если я меняю лист и выполняю там "что-то" (например, редактирую ячейку).
Это ошибка Excel или что я пропускаю?