Господа, доброго времени суток.
Ситуация такая: средствами VBA написал функцию, производящую некоторые вычисления, опираясь на ячейки в листе, где используется функция.
Для автоматического пересчета значений добавил после объявления переменных Application.Volatile.
Теперь при любом изменении любых ячеек на текущем листе формула пересчитывается, но при изменении ячеек в других листах появляется #ЗНАЧ.
Полагаю, напортачил где-то в описании функции,
код оной привожу:
Private Function FullPrice(cellAddress As String)
Dim PostPriceCell As String
Dim PostPrice As Double
Dim FullWeight As Double
Dim Weight As Double
Dim Price As Double
Dim UCells As Double
Dim CellTop As String
Dim CellBottom As String
Dim cellAddress1 As String
Application.Volatile True
With Range(cellAddress)
PostPriceCell = .Offset(0, -1).MergeArea.Address
Price = .Offset(0, -3).Value
Weight = .Offset(0, -4).Value
End With
PostPrice = WorksheetFunction.Sum(Range(PostPriceCell))
UCells = Range(PostPriceCell).Rows.Count
CellTop = Range(PostPriceCell).Range("A1").Offset(0, -3).Address
CellBottom = Range(CellTop).Offset(UCells - 1, 0).Address
FullWeight = WorksheetFunction.Sum(Range(CellTop, CellBottom))
FullPrice = Price + Weight * PostPrice / FullWeight
End Function
Любые изменения и оптимизация только приветствуются.
Ситуация такая: средствами VBA написал функцию, производящую некоторые вычисления, опираясь на ячейки в листе, где используется функция.
Для автоматического пересчета значений добавил после объявления переменных Application.Volatile.
Теперь при любом изменении любых ячеек на текущем листе формула пересчитывается, но при изменении ячеек в других листах появляется #ЗНАЧ.
Полагаю, напортачил где-то в описании функции,
код оной привожу:
Private Function FullPrice(cellAddress As String)
Dim PostPriceCell As String
Dim PostPrice As Double
Dim FullWeight As Double
Dim Weight As Double
Dim Price As Double
Dim UCells As Double
Dim CellTop As String
Dim CellBottom As String
Dim cellAddress1 As String
Application.Volatile True
With Range(cellAddress)
PostPriceCell = .Offset(0, -1).MergeArea.Address
Price = .Offset(0, -3).Value
Weight = .Offset(0, -4).Value
End With
PostPrice = WorksheetFunction.Sum(Range(PostPriceCell))
UCells = Range(PostPriceCell).Rows.Count
CellTop = Range(PostPriceCell).Range("A1").Offset(0, -3).Address
CellBottom = Range(CellTop).Offset(UCells - 1, 0).Address
FullWeight = WorksheetFunction.Sum(Range(CellTop, CellBottom))
FullPrice = Price + Weight * PostPrice / FullWeight
End Function
Любые изменения и оптимизация только приветствуются.