2017-05-03 47 views
0

问题:For currentRow = 25 To rowCount之后,for语句的其余部分不断跳过。For循环在VBA中没有任何原因被跳过

我有两个其他For语句之前有问题的代码块和他们的格式是相同的,这两个工作正常。

Public Sub WeightB() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 7 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    For currentRow = 24 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
      Exit For 
     End If 
    Next 
End Sub 

我已经提到For loops being skipped without cause in VBA,但仍然无法弄清楚这一点。

+1

在'For'循环之前'rowCount'的值是多少? – Bathsheba

+1

任何行计数应该是“长”而不是“整数”类型。您还应完全限定单元格:阅读[VBA最佳实践 - 永不假定工作表](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9218/never-assume-the-worksheet #T = 201704280559226199101)。 –

+0

我试过MsgBox rowCount,它显示22. –

回答

2

如果rowCount,按您的明确意见,是22那么你For循环变得

For currentRow = 24 To 22

这显然是一个空操作,因为没有办法24能数到22。如果你需要在最后数的方向来算,那么你可以使用类似

For currentRow = 24 To rowCount Step Iif(rowCount - 24 < 0, -1, +1) 

,但是这真的是你想要做什么?此外,开始使用Long类型的行和列号,现在工作表有超过32767行,并且在所有模块的顶部使用Option Explicit来消除恼人的自发变量创建。

+0

值得一提的是,如果这是故意的,但你想从24跳到22(24,23,22),那么OP应该使用'For currentRow = 22 To 24 Step -1' – Wolfie

+0

这就是我在第二个部分,innit。 – Bathsheba

+0

我可能回答你错了。我试图做的是从D24输入数据到D42。但是我希望这个脚本找到那个范围内的空单元格来输入输入。 –