Excel &引用;“循环”;“内部”;“While循环”;无限

Excel &引用;“循环”;“内部”;“While循环”;无限,excel,vba,Excel,Vba,因此,只要我的数据以一个有值的范围结束,我就有一些代码工作得很好 它在我的范围内查看所有单元格是否为空,如果为空,我希望它跳到下一行。然而,正如你可能想象的那样,一旦我弄清了我的数据的底细,它就会永远持续下去 有没有一种方法,我可以把一些类型的检查,以防止这从错误出来,一旦我到达我的数据底部 我的“While”不会阻止它,除非我以一个包含数据的范围结束。因为它被困在这个循环中 如果有必要,我会使用excel 2013 While Not IsEmpty(Cells(RowCount, 4)) '

因此,只要我的数据以一个有值的范围结束,我就有一些代码工作得很好

它在我的范围内查看所有单元格是否为空,如果为空,我希望它跳到下一行。然而,正如你可能想象的那样,一旦我弄清了我的数据的底细,它就会永远持续下去

有没有一种方法,我可以把一些类型的检查,以防止这从错误出来,一旦我到达我的数据底部

我的“While”不会阻止它,除非我以一个包含数据的范围结束。因为它被困在这个循环中

如果有必要,我会使用excel 2013

While Not IsEmpty(Cells(RowCount, 4)) 'loops all code

i = 1

Do Until i = 2 

If WorksheetFunction.CountA(rng) = 0 Then
    RowCount = RowCount + 1
    Set rng = ws.Range("F" & RowCount & ":N" & RowCount)
Else
    i = 2
    'test'rng.Select
End If


Loop

Wend
空(
CountBlank
)与空(
CountA
)行范围
  • 调整常量部分和工作表(工作簿)中的值
选项显式
Sub BlankRowRanges()'Blank表示:空,“,”'”。。。
Const sFirst As String=“D2”
Const sCols As String=“F:N”
将ws设置为工作表:设置ws=ActiveSheet
“Set ws=ThisWorkbook.Worksheets(“Sheet1”)更好。
'创建对源范围的引用。
变暗srg As范围
我认为时间很长
带ws.Range(sFirst)
暗淡的lCell As范围
设置lCell=.Resize(.Worksheet.Rows.Count-.Row+1)_
.Find(“*”,xlFormulas,,xlPrevious)
如果lCell为空,则退出Sub
设置srg=.Worksheet.Columns(sCols).调整大小(lCell.Row-.Row+1)_
.Offset(.Row-1)
scCount=srg.Columns.Count
以
'Debug.Print srg.Address,scCount
'循环源范围的每一行(范围)。
调暗rrg As范围
对于srg.行中的每个rrg
如果Application.CountBlank(rrg)=scCount,则
“做些更有意义的事情。
Debug.Print“范围”&“rrg.Address&”为空
其他的
“做些更有意义的事情。
调试。打印“范围”&“rrg.Address&”不是空的
如果结束
下一个rrg
端接头
Sub-EmptyRoranges()'空
Const sFirst As String=“D2”
Const sCols As String=“F:N”
将ws设置为工作表:设置ws=ActiveSheet
“Set ws=ThisWorkbook.Worksheets(“Sheet1”)更好。
'创建对源范围的引用。
变暗srg As范围
带ws.Range(sFirst)
暗淡的lCell As范围
设置lCell=.Resize(.Worksheet.Rows.Count-.Row+1)_
.Find(“*”,xlFormulas,,xlPrevious)
如果lCell为空,则退出Sub
设置srg=.Worksheet.Columns(sCols).调整大小(lCell.Row-.Row+1)_
.Offset(.Row-1)
以
'Debug.Print srg.Address
'循环源范围的每一行(范围)。
调暗rrg As范围
对于srg.行中的每个rrg
如果Application.CountA(rrg)=0,则
“做些更有意义的事情。
Debug.Print“范围”&rrg.Address&“为空。”
其他的
“做些更有意义的事情。
Debug.Print“范围”&rrg.Address&“不为空。”
如果结束
下一个rrg
端接头

为什么这里需要两个循环?在哪里实例化
行数
?什么是
ws
?请包括您的所有代码。我认为这里只需要一个
Do While
就可以了。主要问题是
Do直到I=2
为止,因为如果
else I=2
在循环中没有触发,我将始终为1,因此无限循环发生。