我是Excel 2003中的VBA的新手。我寫了一個UDF,它包含兩個字符串:一個過濾器和一個將作爲單元格引用的UDF。當我在VBA編輯器中連續幾次調試函數並調用函數時,一切都按照我的預期工作。但是,當我在電子表格中多次使用UDF時,儘管存在不同的輸入,但所有用途都顯示完全相同的答案。Excel VBA:答案會「卡住」
該功能如下。它更新數據透視表,然後將該值複製到單元格外。但我必須誤用:
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)
我不是指定功能正常,也許?這對我來說是個謎。
您可以發佈示例電子表格嗎?也許作爲Dropbox上的公開文檔? 另外,你有沒有嘗試過在函數中設置一個斷點並逐步執行代碼? – bugtussle 2010-09-01 21:59:08
您是否檢查了編寫UDF的限制?我記得你不能改變除當前細胞以外的任何物質,或者結果不穩定。請參閱http://www.ozgrid.com/VBA/Functions.htm – 2010-09-01 22:24:53
與您的問題無關,但請注意,如果您DIM變量但未設置類型,則VBA將其默認爲一個變體。 – 2010-09-01 23:01:32