2014-02-14 206 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

希望可以使用

相关问题