Vba 在自定义函数中添加两个不带参数的单元格

Vba 在自定义函数中添加两个不带参数的单元格,vba,excel,user-defined-functions,Vba,Excel,User Defined Functions,我正在努力学习VBA for Excel。我在看一个关于VBA中自定义函数/用户定义函数的教程。我试图创建一个用户定义的函数,但它显示了一个#REF在我键入函数名的单元格中出错。我试图添加(A单元格+B单元格),而不向函数传递任何参数。我使用偏移量遍历单元格左侧的1,2个单元格,该单元格的函数为公式。这是我的密码: Option Explicit Function ADD12() Dim Number_1 As Integer Dim Number_2 As Integer Number_2

我正在努力学习VBA for Excel。我在看一个关于VBA中自定义函数/用户定义函数的教程。我试图创建一个用户定义的函数,但它显示了一个
#REF在我键入函数名的单元格中出错。我试图添加(
A单元格+B单元格
),而不向函数传递任何参数。我使用偏移量遍历单元格左侧的1,2个单元格,该单元格的函数为公式。这是我的密码:

Option Explicit

Function ADD12()
Dim Number_1 As Integer
Dim Number_2 As Integer

Number_2 = ActiveCell.Offset(0, -2).Value
Number_1 = ActiveCell.Offset(0, -1).Value
ADD12 = Number_1 + Number_2
End Function
以及我的工作表的屏幕截图:

错误是因为不能将单元格地址用作函数名

但也要注意ActiveCell总是在变化。您可能需要查看调用方
,以获取函数所在的单元格

例如:


您面临的问题是,您为UDF选择的名称是非法的

ADD12
是工作表上单元格的地址。这保证了引用错误,并且您的UDF永远不会被调用

将名称更改为非单元格地址,如
ADD12

调用者
是执行所需操作的正确方法,除非您确实希望它从所选单元格计算。这两种方法都可以保证函数是非易失性的,这意味着如果更改其中一个依赖值,它不会自动更新结果


您应该使用长变量类型而不是整数。

255与此处的任何内容无关。
Integer
数据类型对-32768到32767范围内的数字有效。但我同意,通常应使用
Long
数据类型,就像在现代版本的Excel中一样,我被告知它更有效。是否应始终使用
Long
而不是
Integer
?即使数字从未接近整数的极限?@BruceWayne是的。VBA针对长时间优化。它能更有效地处理这些问题,因此速度更快。显然,他们使用了两倍的内存,但这不再是问题,就像25年前一样。谢谢!这就解决了!由于我还在学习VBA,您能提供一些信息说明为什么ADD12是一个单元格地址吗?@mk117它指的是Excel常用A1符号中第12行第784列中的单元格OK!我没意识到!列按字母顺序排列,行按数字排序!谢谢!++尼斯:)顺便说一句,如果数字是固定的,您可以使用
整数
代替
,例如i=1到5的
。在这里,如果将
i
暗显为
Integer
,这应该不是问题。但是,在上述情况下,excel表格中的数字可能会更改,因此建议使用
Long
。就“效率”而言,它实际上可以忽略不计:)另一个@pnuts是否已就标签达成共识或提出了一致意见?另一方面,近年来,贫困问题的数量似乎大幅增加。
Option Explicit

Function ADD_12()
Dim Number_1 As Integer
Dim Number_2 As Integer
Dim R As Range

Set R = Application.Caller

Number_2 = R.Offset(0, -2).Value
Number_1 = R.Offset(0, -1).Value
ADD_12 = Number_1 + Number_2
End Function