空白单元格-如何使用空/空单元格停止VBA过程/函数



我有一个大型VBA项目,我的任务是更改它收集一些数据的方式。

基本上,数据将在工作表的W列中输入,宏中的代码如下:

For Each rCell In Worksheets("REPORT").Range("W2:W50")
Debug.Print rCell.Value:
  sJob = rCell.Value

它获取我希望它在W列中获取的数据。

不久之后,它启动了这段代码中的一个函数:

vJobFolders = Split(FindJobDir(strpathtofile & sJob), ",")
For i = 0 To UBound(vJobFolders)

这个名为FindJobDir的函数看起来是这样的:

Function FindJobDir(ByVal strPath As String) As String
Dim sResult As String
sResult = Dir(strPath & "*", vbDirectory)
FindJobDir = UCase$(sResult)
Do While sResult <> ""
sResult = Dir
If Len(sResult) > 0 Then FindJobDir = FindJobDir & "," & UCase$(sResult)
Loop
End Function

发生的情况是,在它获取了所有可以在W列找到的数据后,它只是继续添加作业路径中的所有内容。直到找到该路径中的所有"作业",它才会停止。当W列中的数据为null/空时,我需要它停止这样做。

不是VBA专业人员,不知道该说什么或在哪里。。。有什么建议吗?

如果您有在for循环之后运行的代码,我只会使用Exit For来突破for循环,而不是Exit Sub

For Each rCell In Worksheets("REPORT").Range("W2:W50")
    If IsEmpty(rCell.Value) Then Exit For
    Debug.Print rCell.Value:
    sJob = rCell.Value
    ' ...
Next

我也不会把你的范围硬编码为49个单元格。如果你输入的数据比这个多或少,你就会遇到像刚才一样的问题。最好的解决方案是先用之类的东西选择你想要操作的范围

Dim reportSheet As Worksheet
Set reportSheet = Worksheets("REPORT")
Dim lastRow As Integer    
lastRow = reportSheet.Cells(reportSheet.Rows.Count, "W").End(xlUp).Row
Dim jobRange As Range
Set jobRange = reportSheet.Range("W2:W" & lastRow)
For Each rCell In jobRange
    Debug.Print rCell.Value ' colon is only needed for line breaks
    sJob = rCell.Value
    ' ...
Next

有关如何计算最后一行的说明,请参见此答案。

如果我理解正确,如果W列中的值为空,您希望停止代码运行。如果是这样的话,下面的编辑应该对你有效。。。

更改此项:

For Each rCell In Worksheets("REPORT").Range("W2:W50")
Debug.Print rCell.Value:
  sJob = rCell.Value

到此:

For Each rCell In Worksheets("REPORT").Range("W2:W50")
If IsEmpty(rCell.Value) Then Exit Sub
Debug.Print rCell.Value:
  sJob = rCell.Value

最新更新