2017-12-12 1 views
0

私はファイルが上記のディレクトリにあるかどうかをチェックするExcel vbaサブを持っています。問題は、forループの最初の反復の後に常にFile Savedに移動することです。ファイルが実際に見つかった場合、ActualValueの値には値が含まれていますが、値が見つからない場合は値が ""です。問題はそれが常に= 0または= ""状態になることです。レン(Dir(ActualValue))= 0の場合、コードexcel vbaは常にループ内でtrueを返します

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  
+1

なぜあなたはそれだけでレン(実際の値) – Lowpar

+0

@Joshuaすべきではない(DIRをLENを入れている - i' 'の値は何であり、したがって、何? "Sheet4.Cells(i、1)'の値ですか? – ashleedawg

+0

レン(Dir(ActualValue))をmsgboxに入れて入手したものを見るか、ローカルウィンドウを使って内容を確認してください – Lowpar

答えて

0

今日の日付をStringに変換しようとしているDateFormat = Format("2017-12-11", "yyyy-mm-dd")と思っています。この場合、DateFormat = Format(Date, "yyyy-mm-dd")を使用してください。

また、.xls.xlsx.xlsmなどの拡張(2003形式を含む)すべてのExcelファイルの種類を、取得するためのより安全な方法は、.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 
+0

チップをありがとう!しかし、それでもすべての反復が私のためにelse文に行きましたので、まだ動作しませんでした –

+0

@JoshuaAaronパスとファイル名を表す 'ActualValue'をダブルチェックする必要があります(私もテスト時にバグがありました) –

0

DateFormat = Format("2017-12-11", "yyyy-mm-dd")は意味を持ちません。
フォーマットは、数字または日付にフォーマット文字列を適用します。したがって、私たちがdec-11について話すなら、
DateFormat = Format(#12-11-2017#, "yyyy-mm-dd")と読むべきです。

また、ActualValue計算の直後にDebug.Print ActualValueを追加して、予想通りの結果を返すかどうかを確認できます。

関連する問題