Синтаксис для параметра диапазона, распознаваемого в VBA, а не в ячейке - PullRequest
0 голосов
/ 11 июля 2019

Я пишу формулу для использования в ячейке, чтобы выполнить вычисление для столбцов данных в зависимости от того, что она видит под заголовками столбцов (диапазоны, используемые в качестве параметров).Код работает в vba, но возвращает #VALUE!в клетке.Моя проблема сводится к использованию неправильного синтаксиса в ячейке для передачи диапазонов в функцию.

Функция имеет значение

Function MultiComp(Date1 As Range, Delta1 As Range, Date2 As Range, Delta2 As Range) 
  'Do Stuff
  'Return answer as a double or "Insufficient" if no data is available
End Function

и работает в VBA при вызове другой функцией в строке:

Range("K25") = MultiComp(Range("B4"), Range("F4"), Range("M4"), Range("Q4"))

, но показывает # ЗНАЧЕНИЕ!в ячейке при использовании:

"=MultiComp(B4, F4, M4, Q4)"

Это должно быть относительно простое исправление синтаксиса, но я не могу определить его для жизни.

Я пробовал варианты Range(B4), Range ("B4"), B4: B4, попытка использовать косвенный код и приведенный ниже код в качестве управляемого примера, который в ячейке вел себя как ожидалось "= RangeTest (J20)".

Function RangeTest(Here As Range)
   MsgBox (Here.Address & " is range Address" & vbNewLine & Here & " is range Value") 
End Function

РЕДАКТИРОВАТЬ: полный код

Function MultiComp(Date1 As Range, Delta1 As Range, Date2 As Range, Delta2 As Range)
Dim wsf As WorksheetFunction
Dim ws As Worksheet
Dim V1w, V2w As Variant
Set wsf = Application.WorksheetFunction
Set ws = ThisWorkbook.Worksheets("TestingPage")

A = FindRecentDates(Date1)
V1 = wsf.Transpose(RangeFromTop(Delta1, A).Value)
ReDim V1w(1 To UBound(V1))
For i = 1 To UBound(V1w)
    V1w(i) = ws.Range("A1") - (wsf.Days(Now(), Date1.Offset(i - 1, 0)))
Next i
V1SumP = wsf.SumProduct(V1, V1w)
V1Weight = wsf.Sum(V1w)
TotalSumP = TotalSumP + V1SumP
TotalWeight = TotalWeight + V1Weight

B = FindRecentDates(Date2)
V2 = wsf.Transpose(RangeFromTop(Delta2, B).Value)
ReDim V2w(1 To UBound(V2))
For i = 1 To UBound(V2w)
    V2w(i) = ws.Range("A1") - (wsf.Days(Now(), Date2.Offset(i - 1, 0)))
Next i
V2SumP = wsf.SumProduct(V2, V2w)
V2Weight = wsf.Sum(V2w)
TotalSumP = TotalSumP + V2SumP
TotalWeight = TotalWeight + V2Weight

'/Calculating Average/
If TotalWeight = 0 Then TotalWeight = 1
WeightedDelta = (TotalSumP / TotalWeight) '/ Denominator
MultiComp = UndoDelta(WeightedDelta)
If TotalSumP = 0 Then MultiComp = "Calculating"

End Function

который сам вызывает дополнительные функции, я не совсем уверен, что этого будет достаточно для работы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...