[英]Excel VBA crashes by changing the value on a cell
我是新来的,请尝试学习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
它在两台不同的计算机上崩溃,没有错误! 实际上,它不会崩溃,而只是停止即可。
我也尝试过一个子,但结果相同。
您已将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中完成的方式。 (是的,有点烂。)
您不能使用UDF Function
更改另一个单元格的值,也不能从UDF Function
中调用Sub
来更改另一个单元格的值。 如果您要运行一个宏,它将执行您希望的操作,那么下面是一些正在运行的代码。
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
我提供了一个可选参数,因此您可以更改增量的起始编号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.