Я новичок в VBA в Excel 2003. Я написал UDF с двумя строками: один фильтр и один, который будет ссылкой на ячейку.Когда я отлаживаю и вызываю функцию пару раз подряд в редакторе VBA, все работает, как я ожидаю.Но когда я использую UDF несколько раз в электронной таблице, все пользователи показывают один и тот же ответ, несмотря на различный ввод.
Функция ниже.Он обновляет сводную таблицу, а затем копирует значение из ячейки.Но я, должно быть, неправильно его использую:
Function UpdatePivotAndFetchCell(catcode As String, theCell As String) As Variant
Dim ws, pt, catField, pi, theval, finalVal
Set ws = Worksheets("Reporting")
Set pt = ws.PivotTables("MyReport")
pt.RefreshTable
Set catField = pt.PivotFields("Category")
For Each pi In catField.PivotItems
If InStr(pi.Value, catcode) Then
pt.PivotFields("Category").CurrentPage = pi.Value
theval = ws.Range(theCell).Value
On Error Resume Next
If (TypeName(theval) <> "Error") Then
finalVal = theval
End If
Exit For
End If
Next pi
UpdatePivotAndFetchCell = finalVal
End Function
Если я запускаю его с редактором VBA, я получаю:
Debug.Print (UpdatePivotAndFetchCell("C001", "K284"))
'Returns 0.48
Debug.Print (UpdatePivotAndFetchCell("C002", "K284"))
'Returns 0.52
Но внутри листа:
=UpdatePivotAndFetchCell("C001", "K284")
(displays 0.52)
=UpdatePivotAndFetchCell("C002", "K284")
(displays 0.52)
Не правильно ли я определяю функцию?Для меня это загадка.