当范围中有空白单元格时,宏将从For退出。如何避免这种情况?

时间:2019-02-16 12:12:27

标签: excel vba

我不知道这是否是问题,但这是我到达的结论。

当在范围宏中找到一个空白单元格时,宏会从FOR循环中退出,但这可能是另一个不同的问题。

无论如何,由于我没有vba的经验,所以我想知道原因以及如何解决它。

使用此代码在目录中查找文件(变量strLocation的路由名称也从D列中也包含了文件名)是否填充了E列(用作范围的电子邮件列),则不会出现问题,但是如果存在是一个空白单元格,发生了奇怪的事情。显示错误消息,并跳过下一个单元格以退出“ For”。

例如在excel工作表中:

FILE_NAME(单元格D) | 电子邮件(单元格E)

文件名_1 | example@hotmail.com

          |  example@hotmail.com

filename_3 |

filename_4 | example@gmail.com

filename_5 | example@gmail.com

当显示消息说从第2行退出的代码末尾之后第2行中没有文件名时,请不要执行第3行中的下一个单元格。(从标头之后的第1行开始计数,范围E2 ...)

'Comprobador PDF
Private Sub comprobar_pdf_Click()

Dim Secfolder As String
Dim Rango As Range, i As Long, cell As Range

With Worksheets("Formacion-Acreditaciones")
    Set Rango = .Range("E2", .Range("E2").End(xlDown)).SpecialCells(xlCellTypeVisible)
End With

Application.ScreenUpdating = False

Dim strLocation As String
For Each cell In Rango
    i = cell.Row
    strLocation = f_ruta.Value & "\" & Worksheets("Formacion-Acreditaciones").Cells(cell.Row, "D").Value & ".pdf"

    If Dir(strLocation) <> "" Then                                  

    Else
        MsgBox "Not Found, No se encuentra el archivo PDF adjunto correspondiente a: " & vbCrLf & cell.Offset(0, -1).Value & vbCrLf & cell.Offset(0, -3).Value & ", " & cell.Offset(0, -4).Value & vbCrLf & vbCrLf & "Anótelo ahora y envíelo más tarde de forma manual con su gestor de correo.", vbExclamation, "Error Archivo adjunto"

        GoTo next_comprobacion

    End If

next_comprobacion:

Next cell
Application.ScreenUpdating = True

MsgBox "Finished, Comprobación de existencia de archivos PDF finalizada.", vbInformation, "Comprobación Archivo adjunto"

End Sub

我希望当范围(单元格E)中的单元格无论是否包含数据并均计为行时。由于我要比较的是D列的名称和目录中文件的名称,因此以后通过电子邮件将其作为附件发送。

这是我的完整代码:https://github.com/arv187/vba/issues/5#issue-411066359 预先感谢。

1 个答案:

答案 0 :(得分:0)

由于xlDown将在第一个空白处停止,因此您想从工作表的底部向上走

With Worksheets("Formacion-Acreditaciones")
    Set Rango = .Range("E2:E" & .Cells(.rows.Count, "E").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
End With