我有一个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
答案 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