繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM