【问题标题】:While function not working in error handler - vba?虽然函数在错误处理程序中不起作用 - vba?
【发布时间】:2015-10-23 00:29:37
【问题描述】:

我有以下代码提取,它打开了一个工作簿,但是如果它不存在,我希望它找到并打开最新的文件,但是它不起作用,只是说它无法打开今天日期的文件?

谁能告诉我哪里出错了? :(

Sub test()

Application.DisplayAlerts = False
On Error GoTo ErrHandler:
Workbooks.Open Worksheets("Filenames").Range("A6").Value

Exit Sub

ErrHandler:
Dim dtTestDate As Date
Dim sStartWB As String

Const sPath As String = "I:\Transaction Reports\Supply Outlook Inputs\"
Const dtEarliest = #10/10/2015#

dtTestDate = Date
sStartWB = ActiveWorkbook.Name

While ActiveWorkbook.Name = sStartWB And dtTestDate >= dtEarliest
    On Error Resume Next
    Workbooks.Open sPath & "qryDAConsumption " & Format(dtTestDate, "DDMMYY") & ".xlsx"
    dtTestDate = dtTestDate - 1
    On Error GoTo 0
Wend

If ActiveWorkbook.Name = sStartWB Then MsgBox "Earlier file not found."

Dim wb8 As String
wb8 = ActiveWorkbook.Name

Application.DisplayAlerts = True

Resume Next

Sheets("qryDAConsumption").Select
Cells.Copy
ThisWorkbook.Activate
ActiveSheet.Paste

End Sub

【问题讨论】:

    标签: excel error-handling while-loop vba


    【解决方案1】:

    回答您的问题:
    While-Loops 在错误处理程序中工作。

    您的问题更多在于您尝试完成任务的方式。错误应该是例外 - 而不是主要流程。

    为什么在尝试打开文件之前不检查文件是否存在? 像这样的:

    Dim fso as Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    if fso.FileExists(Worksheets("Filenames").Range("A6").Value) Then
        'open the file 
    else
        'Search for the latest file in your folder
    end if
    

    希望这会让你开始朝着正确的方向前进。

    问候

    【讨论】:

    • 感谢您的帮助 therak ill 试一试这种方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多