Excel VBA:答案为;";

Excel VBA:答案为;";,excel,vba,Excel,Vba,我是Excel 2003中VBA的新手。我已经编写了一个UDF,它包含两个字符串:一个过滤器和一个单元格引用。当我在VBA编辑器中调试并连续调用函数几次时,一切都按照我的预期进行。但是,当我在电子表格中多次使用UDF时,所有使用都会显示完全相同的答案,尽管有不同的输入 函数如下所示。它更新数据透视表,然后从单元格中复制值。但我一定是误用了它: Function UpdatePivotAndFetchCell(catcode As String, theCell As String) As Var

我是Excel 2003中VBA的新手。我已经编写了一个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
但在工作表中:

=UpdatePivotAndFetchCell("C001", "K284")
    (displays 0.52)
=UpdatePivotAndFetchCell("C002", "K284")
    (displays 0.52)

我可能没有正确地指定函数吗?这对我来说是个谜。

从工作表调用的函数是。否则,您可以轻松地在计算树中创建无限循环。因此,所有更改工作表的内容都将被忽略(例如
refreshttable()
.CurrentPage=
),并导致函数停止


为完整起见,有一个,但您不应该使用它,如果您使用它,您可以使用。

从工作表调用的函数是。否则,您可以轻松地在计算树中创建无限循环。因此,所有更改工作表的内容都将被忽略(例如
refreshttable()
.CurrentPage=
),并导致函数停止


为了完整性起见,有一个,但是你不应该使用它,如果你使用它,你可以使用它。

你能发布一个示例电子表格吗?也许是dropbox上的公共医生?另外,您是否尝试过在函数中设置断点并单步执行代码?是否检查了编写UDF的限制?我记得你只能改变当前单元格,否则结果不稳定。请参阅与您的问题无关的内容,但请注意,如果您调暗了变量但未设置类型,则VBA会将其默认为变量。您可以发布示例电子表格吗?也许是dropbox上的公共医生?另外,您是否尝试过在函数中设置断点并单步执行代码?是否检查了编写UDF的限制?我记得你只能改变当前单元格,否则结果不稳定。查看与您的问题无关的内容,但请注意,如果您调暗了变量但未设置类型,则VBA会将其默认为变量。啊哈。你有什么建议作为替代?谢谢哦,也许我可以把做改变的东西做成一个潜艇,把结果放在某个细胞里,然后从那里抓取?我去试试。啊哈。你有什么建议作为替代?谢谢哦,也许我可以把做改变的东西做成一个潜艇,把结果放在某个细胞里,然后从那里抓取?我去试试。
=UpdatePivotAndFetchCell("C001", "K284")
    (displays 0.52)
=UpdatePivotAndFetchCell("C002", "K284")
    (displays 0.52)