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

时间:2016-07-26 18:26:03

标签: excel vba excel-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列,它只是继续添加作业路径中的所有内容。它并没有停止,直到所有&#34;工作&#34;在那条路上找到了。当W列中的数据为空/空时,我需要它停止这样做。

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

2 个答案:

答案 0 :(得分:1)

如果我理解正确,如果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

答案 1 :(得分:1)

而不是Exit Sub我只会使用Exit For来跳出for循环,以防你有代码在for循环之后运行。

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

有关如何计算最后一行的说明,请参阅this answer