2017-03-03 112 views
0

我想在Excel工作表中使用我自己的VBA函數,返回值和相同的功能操縱相同或其他工作表上的單元格,但結果是#VALUE!的最小工作實例(辦公室升級教授2010,32位):Excel VBA自己的功能,在工作表中改變工作表中的值

Function abc() As Integer 
    Dim i% 
    i = 0 
    Sheet1.Cells(1, 2).Value = 2 
    abc = i 
End Function 

當我執行Debug.Print abc它顯然寫入2到細胞B2和印刷的結果是0。我現在想要做的是=abc()Sheet1A1單元上,但我只得到#VALUE!。順便說一句,如果Application.EnableEventsApplication.Calculation被禁用,它也不起作用。設置爲手動。

兩個問題:爲什麼?任何想法如何解決?謝謝。

+0

[見本Q代表一種解決方法](http://stackoverflow.com/q/23433096/445425) –

+0

注意,在workar ound,有一個問題(錯誤?)「Evaluate」運行兩次。 [請參閱此處](http://stackoverflow.com/q/2611929/445425)瞭解_that_的解決方法 –

回答

1

衆所周知,您無法使用UDF更新工作表(UDF中的單元除外)。但是,它會檢查每一個您在您的工作表發生變化時,並將其放在B1一個2你,如果你的函數恰好是=abc()

讓你的虛擬函數在一個標準模塊中一個很可怕的解決方法

Public Function abc() As Integer 
    abc = 0 
End Function 

然後在Sheet 1中模塊的地方下面的代碼

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Cells.Count > 1 Then Exit Sub 

    If Target.Formula = "=abc()" Then 
     Me.Cells(1, 2).Value = 2 
    End If 
End Sub 
0

這種類型的用戶定義函數(從單元內調用)不能修改單元格值而不是將值返回給包含UDF的單元格。

相關問題