gpt4 book ai didi

excel - VBA : Error handling only works once in loop

转载 作者:行者123 更新时间:2023-12-03 08:44:04 25 4
gpt4 key购买 nike

我的代码从Excel表中列出的路径中检查文件列表的存在。该表中现有文件的值为1,不存在文件的值为0。

错误处理程序针对第一个错误工作,继续循环并继续进行验证,直到遇到第二个错误为止,然后显示错误消息并暂停宏。

我尝试了其他迭代方法,其中包括在其他地方建议使用“包括恢复和下一个”,这会导致“误报”,因为代码在失败的if语句下恢复“then”代码并将其值设置为1(存在)或卡在无限循环出现第二个错误。

Sub File_Check()
Dim Filename, Trade_day, Today, lastmodified As String
Dim MasterTable As ListObject
Dim i As Integer

Today = Format(Now(), "DD-MM-YYYY")
Trade_day = Range("Trade_day_file")

Set MasterTable = ThisWorkbook.Sheets("Dashboard").ListObjects("MasterTable")


MasterTable.ListColumns(1).DataBodyRange = 0

For i = 1 To MasterTable.ListRows.Count


On Error GoTo Does_Not_Exist


'Check date in filename
Filename = VBA.Dir(MasterTable.DataBodyRange(i, 3).Value & Trade_day & MasterTable.DataBodyRange(i, 4).Value)

If Filename <> vbNullString Then

MasterTable.DataBodyRange(i, 1) = 1

'Check file creation date instead
ElseIf Format(FileDateTime(MasterTable.DataBodyRange(i, 3).Value & MasterTable.DataBodyRange(i, 4).Value), "DD-MM-YYYY") = Today Then
MasterTable.DataBodyRange(i, 1) = 1

End If


GoTo Skip_Err_Handler



Does_Not_Exist:

MasterTable.DataBodyRange(i, 1) = 0
Err.Clear


Skip_Err_Handler:

Next i


最佳答案

解决方案非常简单,添加“Resume Skip_Err_Handler”,它就像一个魅力。它将值1分配给存在的路径,将0分配给不存在的路径。
为其他人附加的代码具有相同的循环错误处理问题:

Sub File_Check()
Dim Filename, Trade_day, Today, lastmodified As String
Dim MasterTable As ListObject
Dim i As Integer

Today = Format(Now(), "DD-MM-YYYY")
Trade_day = Range("Trade_day_file")

Set MasterTable = ThisWorkbook.Sheets("Dashboard").ListObjects("MasterTable")


MasterTable.ListColumns(1).DataBodyRange = 0

For i = 1 To MasterTable.ListRows.Count


On Error GoTo Does_Not_Exist


'Check date in filename
Filename = VBA.Dir(MasterTable.DataBodyRange(i, 3).Value & Trade_day & MasterTable.DataBodyRange(i, 4).Value)

If Filename <> vbNullString Then

MasterTable.DataBodyRange(i, 1) = 1

'Check file creation date instead
ElseIf Format(FileDateTime(MasterTable.DataBodyRange(i, 3).Value & MasterTable.DataBodyRange(i, 4).Value), "DD-MM-YYYY") = Today Then
MasterTable.DataBodyRange(i, 1) = 1

End If


GoTo Skip_Err_Handler


Does_Not_Exist:

MasterTable.DataBodyRange(i, 1) = 0
Err.Clear
Resume Skip_Err_Handler


Skip_Err_Handler:

Next i

End Sub

关于excel - VBA : Error handling only works once in loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com