如果Len(Dir(ActualValue))= 0那么代码excel vba总是在for循环中返回true

时间:2017-12-12 08:11:20

标签: excel vba excel-vba

我有一个excel vba sub,用于检查文件是否在所述目录中。问题是它在for循环的第一次迭代后总是转到File Saved。如果实际找到该文件,ActualValue的值中有一些,但如果缺少该值则为“”。问题是它总是转到= 0或=“”条件。

Dim ActualValue As String

For i = 17 To 32
On Error Resume Next

DateFormat = Format("2017-12-11", "yyyy-mm-dd")

Sheet4.Cells(i, 5).Select
Selection.ClearContents

SearchValue = Sheet4.Cells(i, 1).Value

If SearchValue = "" Then
    MsgBox "No A/C indicated. Please check.", vbOKOnly
    Exit Sub
End If

ActualValue = Dir("A:\123 456\789\abc efg\Sample Folder\SAMPLE FOLDER\" & DateFormat & "\" & SearchValue & "" & "*.xls")

If Len(Dir(ActualValue)) = 0 Then
    Sheet4.Cells(i, 10).Value = "File Saved"
Else
    Sheet4.Cells(i, 10).Value = "File Missing"
    GoTo FileMissing
End If

FileMissing:
Next i

Application.ScreenUpdating = True
End Sub    

2 个答案:

答案 0 :(得分:0)

DateFormat = Format("2017-12-11", "yyyy-mm-dd")毫无意义 格式将格式字符串应用于数字或日期。因此,应该如下:
DateFormat = Format(#12-11-2017#, "yyyy-mm-dd")如果我们谈论dec-11。

此外,您可以在ActualValue计算之后添加Debug.Print ActualValue,以查看它是否返回了您的预期。 (务必按ctrl + G显示调试窗口)

答案 1 :(得分:0)

我认为此行DateFormat = Format("2017-12-11", "yyyy-mm-dd")您尝试将今天的日期转换为String,在这种情况下使用DateFormat = Format(Date, "yyyy-mm-dd")

此外,获取所有Excel文件类型(包括2003格式)扩展程序(如.xls.xlsx.xlsm的更安全的方法是使用.xl??

上次,在您的代码中,无需使用On Error Resume Next或使用GoTo

<强> 代码

Option Explicit

Sub CheckFilesinDirDate()

Dim ActualValue As String, SearchValue As String, DateFormat As String
Dim i As Long

For i = 17 To 32           
    DateFormat = Format(Date, "yyyy-mm-dd") ' I think you are trying to get today's date int to a String

    Sheet4.Cells(i, 5).ClearContents

    SearchValue = Sheet4.Cells(i, 1).Value        
    If SearchValue = "" Then
        MsgBox "No A/C indicated. Please check.", vbOKOnly
        Exit Sub
    End If

    ActualValue = Dir("A:\123 456\789\abc efg\Sample Folder\SAMPLE FOLDER\" & DateFormat & "\" & SearchValue & "" & "*.xl??")               
    If Dir(ActualValue) <> "" Then
        Sheet4.Cells(i, 10).Value = "File Saved"
    Else
        Sheet4.Cells(i, 10).Value = "File Missing"
    End If
Next i

Application.ScreenUpdating = True

End Sub