You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA循环计数器报错Run-time error '91':A9到A38计数需求求助

搞定VBA运行时错误91和循环计数器问题

嘿,我来帮你拆解下代码里的问题,这就是你碰到Run-time error '91'的核心原因,顺便把循环计数器改成你要的1到30:

为啥会报错?

  • Range对象没加Set:你给lastRow赋值时,它是个Range类型,但没写Set关键字,VBA会默认把单元格的值赋给它,而不是你需要的单元格对象。
  • 类型完全不匹配:i是数字类型,你却直接拿它和Range对象做比较,这肯定会触发错误!
  • 计数器未初始化:i一开始默认是0,循环逻辑根本跑不起来。
  • 单元格引用冗余:已经指定了mySheet,直接用mySheet.Range更稳妥,不用写'Sheet1'!这种多余的前缀。

改好的代码(直接能用)

这个版本会让计数器从1跑到30,正好对应A9到A38的30个单元格:

Private Sub cmdsGO_Click()
    Dim myWrkBk As Workbook
    Dim mySheet As Worksheet
    Dim startRow As Long
    Dim lastRow As Long
    Dim i As Long
    
    Set myWrkBk = ActiveWorkbook
    Set mySheet = myWrkBk.Sheets("Sheet1")
    
    ' 直接取行号,用数字类型和计数器匹配
    startRow = mySheet.Range("A9").Row
    lastRow = mySheet.Range("A38").Row
    
    ' 计数器从1开始,对应第一个单元格A9
    i = 1
    ' 总次数是38-9+1=30次,刚好到30结束
    While i <= (lastRow - startRow + 1)
        ' 这里可以加你要执行的操作,比如操作当前单元格:mySheet.Cells(startRow + i - 1, "A")
        Debug.Print "当前计数:" & i ' 可以在立即窗口看结果测试
        i = i + 1
    Wend
End Sub

小提示

如果需要在循环里操作A9到A38的每个单元格,用mySheet.Cells(startRow + i - 1, "A")就能精准定位,比如要给单元格赋值的话,就写mySheet.Cells(startRow + i - 1, "A").Value = i,这样A9到A38就会依次填入1到30啦。

内容的提问来源于stack exchange,提问作者j man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:52:35