Excel在单元格中输入公式

时间:2014-02-14 04:27:56

标签: excel vba

Function bd()

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

End Function

这是我的功能。 为什么当我将=bd()输入到sheet1中的任何单元格时,A1中的数据不会更改为1?我不想使用按钮来更改值。

2 个答案:

答案 0 :(得分:0)

为什么不起作用

如果从Excel公式调用函数,则函数将成为用户定义函数(= UDF)。

UDF必须遵循特殊规则 - 主要原则是它无法以任何方式改变Excel中的任何内容 - 它只会返回一个值!您的功能明显违反了此规则。

(供参考:另一个主要限制是它也不能访问调用函数时传递给它的参数之外的任何数据。因此,你不能使用MyUDF=Range("A1").Value - 但只能像{{ 1}}!

替代方法:

如果您想更改工作表但又不想使用按钮,则需要考虑某种触发事件。查看可能的工作表和工作簿事件 - 您将找到事件列表here - 以及详细说明如何使用它们here

例如,您可以使用Sheet1的MyUDF=rngParam1.Value*2。对于这个代码,这个代码在Sheet1代码模块中:

Activate

现在每次激活sheet1时,A1都会被重置!

答案 1 :(得分:0)

试一下

将此代码复制到vba上的“Thisworkbook”

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

现在,如果您在任意工作表的单元格A1上输入'bd()'(不带引号)并按下输入,工作表1的单元格A1将更改为1

将此代码复制到vba上的“Thisworkbook”

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

现在,如果您在工作表1上的单元格A1上输入'bd()'(没有引号)并按下输入工作表1的单元格A1将自动更改为1

希望这有效