Excel VBA:答案被“卡住”

我是Excel 2003中的VBA新手。我写了一个UDF,它包含两个string:一个filter和一个将作为单元格引用的filter。 当我在VBA编辑器中debugging并连续调用这个函数时,一切都按照我的预期工作。 但是,当我在电子表格中多次使用UDF时,尽pipe存在不同的input,但所有用途都显示完全相同的答案。

function如下。 它更新数据透视表,然后将该值从单元格中复制出来。 但我一定是在滥用它:

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) 

我没有正确地指定function,也许? 对我来说这是一个谜。

从工作表调用的函数不允许更改工作表。 否则,您可以轻松地在计算树中创build无限循环。 因此,更改工作表的所有内容都将被忽略(如RefreshTable().CurrentPage = )。