2014-02-14 263 views
0
Function bd() 

    Sheets("sheet1").Range("A1").value=1 

End Function 

這是我的功能。 爲什麼當我輸入=bd()到sheet1中的任何單元格時,A1中的數據不會變爲1?我不想使用按鈕來更改值。Excel將公式輸入單元格

+1

http://stackoverflow.com/questions/16334195/vba-output-write-to-cell-value-error/16336710#16336710可能是有趣的。 – pnuts

回答

0

爲什麼它不工作:

如果從Excel公式調用你的函數,你的功能成爲用戶定義函數(UDF =)。

UDF必須遵循特殊規則 - 主要的一點是它不能通過任何方式改變Excel中的任何內容 - 它只會返回一個值!你的功能明顯違反了這個規則。

(參考:其它主要限制是它也將無法訪問任何數據調用函數時傳遞給它的參數之外。因此,你不能使用MyUDF=Range("A1").Value - 但只有像MyUDF=rngParam1.Value*2

替代做法:

如果你想改變工作表,但不希望使用一個按鈕,你需要考慮某種觸發事件的看可能的工作表和工作簿事件 - 你會。找到事件清單here - 以及如何使用它們的詳細說明here

例如,您可以使用Sheet1的Activate。對於這個地方,這個代碼在Sheet1代碼模塊中:

Private Sub Worksheet_Activate() 
    Range("A1").Value = 1 
End Sub 

現在每次sheet1被激活,A1都會被重置!

0

嘗試這個

複製此代碼對你的 '的ThisWorkbook' VBA的

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
If ActiveSheet.Range("A1").Value = "bd()" Then 
Sheets("sheet1").Range("A1").Value = 1 
End If 
End Sub 

現在,如果你在單元格中輸入 'BD()'(不帶引號) A1在任意表格上並按下輸入表格A1的單元格A1將更改爲1

OR

複製此代碼對你的 '的ThisWorkbook' VBA的

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
If Sheets("sheet1").Range("A1").Value = "bd()" Then 
Sheets("sheet1").Range("A1").Value = 1 
End If 
End Sub 

現在,如果您輸入單元格A1 'BD()'(不帶引號)上表一個並按下輸入單元格A1的Sheet 1將自動更改爲1

希望可以使用

相關問題