【问题标题】:Excel VBA Macro open sheets and ignore if not foundExcel VBA 宏打开工作表,如果找不到则忽略
【发布时间】:2019-04-04 08:09:31
【问题描述】:

我有一个宏代码可以一个接一个地打开几个excel表(我这里只显示3个):

Sub Macro1()

    Workbooks.Open Filename:=Range("F19").Value, UpdateLinks:=0
    ActiveWindow.Visible = True
    Windows("Data Quality Checks - ITS v2.8.xlsm").Activate

    Workbooks.Open Filename:=Range("F21").Value, UpdateLinks:=0
    ActiveWindow.Visible = True
    Windows("Data Quality Checks - ITS v2.8.xlsm").Activate

    Workbooks.Open Filename:=Range("F23").Value, UpdateLinks:=0
    ActiveWindow.Visible = True
    Windows("Data Quality Checks - ITS v2.8.xlsm").Activate

End Sub

“范围”显示具有特定文件路径的单元格。 目前,如果宏没有找到其中一个文件,则会产生错误并强制停止进程。是否可以包含额外的行代码,如果在指定路径中找不到文件,则进程继续并且不会停止(不调试)?

【问题讨论】:

  • 在顶部添加 On error resume next
  • @patel 在没有适当的错误处理的情况下永远不要使用On Error Resume Next!这可能是你能想到的最糟糕的主意。 VBA Error Handling – A Complete Guide
  • 在尝试打开文件之前使用DIR检查文件是否存在...
  • 也不是每次都激活Windows("Data Quality Checks - ITS v2.8.xlsm")。只需将工作簿分配给 workbook 对象,然后使用wb.Range("F19").Value 引用具有文件名和路径的单元格

标签: excel vba


【解决方案1】:

这可能会有所帮助:

Option Explicit

Sub Macro1()

    Dim LastRow As Long, i As Long
    Dim PathName As String, MissingFiles As String

    With ThisWorkbook.Worksheets("Sheet1")

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

            For i = 19 To LastRow Step 2 '<- Start from 19 like the example and stop lastrow column A sheet 1. Loop every two.

                PathName = .Range("A" & i).Value

                If Len(Dir(PathName)) = 0 Then '<- Make sure you add the extension of the file.
                    If MissingFiles = "" Then
                        MissingFiles = PathName
                    Else
                        MissingFiles = MissingFiles & vbNewLine & PathName
                    End If
                Else
                    Workbooks.Open Filename:=PathName, UpdateLinks:=0
                    ActiveWindow.Visible = True
'                    Windows("Data Quality Checks - ITS v2.8.xlsm").Activate
                End If

            Next i

            MsgBox "Missing Files are: " & vbNewLine & MissingFiles

    End With

End Sub

图纸结构:

消息框:

【讨论】:

  • 感谢大家的建议。 @Error1004,我测试了您的建议,虽然没有显示调试错误,但如果文件没有资金,该过程将停止,可能是由于“退出子”部分。如何指示 If Len(Dir(.Range("A1").Value)) = 0 Then (继续执行下一个 IF 命令检查第二个文件是否存在)?
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多