通过更改单元格上的值,Excel VBA崩溃

时间:2014-10-25 18:51:43

标签: excel vba

我是新来的,并尝试学习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,但结果相同。

2 个答案:

答案 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

我已经包含了一个可选参数,因此您可以更改增量的起始编号。