Excel VBA: ответ застревает - PullRequest
       4

Excel VBA: ответ застревает

1 голос
/ 02 сентября 2010

Я новичок в 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)

Не правильно ли я определяю функцию?Для меня это загадка.

1 Ответ

4 голосов
/ 02 сентября 2010

Функции, вызываемые из листа, не позволяют изменять листы .В противном случае вы можете легко создать бесконечные циклы в дереве вычислений.Поэтому все, что изменяет лист, игнорируется (например, RefreshTable() или .CurrentPage =) и вызывает остановку функции.

Для полноты изложения существует обходной путь , но вы1009 * не должен использовать его, и вы можете столкнуться с проблемами , если вы это сделаете.

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