空白单元格 – 如何停止空/空单元的VBA过程/函数

我有一个大的VBA项目,我负责改变它如何收集一些数据。

基本上,数据将被input到工作表中的W列,它的macros代码是这样的:

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 

发生了什么事情后,它抓住所有的数据,它可以find它列W,它只是继续添加在作业path的一切。 它不会停止,直到find该path中的所有“作业”。 当W列中的数据为空/空时,我需要它停止这样做。

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

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

而不是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个单元格。 如果你input的数据或多或less比你所遇到的问题还要严重。 最好的解决办法是先select你想要操作的范围

 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 

查看这个答案 ,解释如何计算最后一行。