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
相关产品推荐
相关产品推荐

