我是新来的,并尝试学习VBA Excel,但它不起作用。
我想要一个带有一个参数的函数,以便每个单元格插入一个增加的值。
Option Explicit
Function DefineAI(rngToSet As Range) As String
Dim intCounter As Integer
Dim cell As Range
On Error GoTo Fehler
Let intCounter = 1
For Each cell In rngToSet.Cel
'cell.Value = intCounter 'Test 1: It crashes with no error
Range(cell).Value = intCounter 'Test 2: It crashes with no error
intCounter = intCounter + 1 'intCounter++ ?? not important yet
Next
DefineAI = "test"
Exit Function
Fehler:
Debug.Print Err.Description
End Function
它在两台不同的计算机上崩溃而没有错误! 实际上它并没有崩溃,只是停下来。
我也尝试使用sub,但结果相同。
答案 0 :(得分:1)
您已将cell
声明为范围,然后将其传递到范围。问题是Range需要一个表示单元格地址的字符串。因此,您会收到运行时错误。
Range(cell).Value = intCounter 'Test 2: It crashes with no error
要解决此问题,只需设置cell
的值即可。
cell.Value = intCounter
我也注意到了这个评论。
'intCounter++ ?? not important yet
您应该知道VBA没有增量运算符。您已正确增加变量。
intCounter = intCounter + 1
这就是它在VBA中的表现。 (是的,它有点糟糕。)
答案 1 :(得分:1)
您无法使用UDF Function
更改其他单元格的值,也无法从更改其他单元格值的UDF Sub
内调用Function
。如果您希望运行一个可以执行您希望的宏,那么这里有一些代码可以运行。
Sub mcr_Call_DefineAI()
Call mcr_DefineAI(Range("D2:D10"))
End Sub
Private Sub mcr_DefineAI(rngToSet As Range, Optional iSTART As Long = 1)
Dim i As Long, r As Range
On Error GoTo Fehler
i = iSTART
For Each r In rngToSet
r = i
i = i + 1
Next
Debug.Print "Test funktionierte!"
Exit Sub
Fehler:
Debug.Print Err.Description
End Sub
我已经包含了一个可选参数,因此您可以更改增量的起始编号。