Vba 在自定义函数中添加两个不带参数的单元格
我正在努力学习VBA for Excel。我在看一个关于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
#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