如果文件名的第一部分与文件夹中的文件匹配,则在电子表格中返回1或0

时间:2018-08-10 19:00:42

标签: excel vba file loops if-statement

我要根据文件名开头的一系列单元格来搜索文件。

然后,我希望宏在文件名旁边(如果不存在)返回1或0。

我的工作表的文件名设置为A2:A29,对于B2:B29中是否存在文件,我想返回1和0

我已经开始尝试编写宏,但是我被卡住了。请帮助

~/.m2/repository

3 个答案:

答案 0 :(得分:2)

  • 遍历A2:A29-使用Offset写入B2:B29
  • folderPath以及每个单元格和通配符"*"中的值连接起来,然后使用Dir function检查是否存在与该模式匹配的文件。
  • 如果存在匹配项,则返回的Len中的String将是> 0
  • Abs(TRUE)返回1; Abs(FALSE)返回0。

 Sub SiteSignal()

    Dim folderPath As String
    Dim Filename As Range, rng As Range

    folderPath = "C:\Users\RobEi\Documents\MWAM_Eisenrich\Client_Data\Sacramento\Sacramento_Flow_Pressure"
    Set Filename = ThisWorkbook.Worksheets("YourSheetName").Range("A2:A29")

    For Each rng In Filename
        rng.Offset(, 1).Value = Abs(Len(Dir(folderPath & "\" & rng.Value & "*")) > 0)
    Next rng

End Sub

答案 1 :(得分:1)

类似的事情应该起作用。在A1中放入文件名。在A2中,您要搜索的文件夹的路径。 A3会告诉您是对还是错

Sub main()
Dim strFile                             As String
Dim inputDirectoryToScanForFile         As String
Dim primaryFile                         As String
Dim foundFile                           As Boolean

    Filename = ActiveSheet.Range("A1")

    inputDirectoryToScanForFile = ActiveSheet.Range("A2")

    strFile = Dir(inputDirectoryToScanForFile & "*")

    Do While strFile <> ""
        If strFile = Filename Then
            foundFile = True
            Exit Do
        End If
        strFile = Dir
    Loop

    ActiveSheet.Range("A3") = foundFile
End Sub

答案 2 :(得分:1)

以上所有方法都可以使用,但这是另一个:D

Sub SiteSignal()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\RobEi\Documents\MWAM_Eisenrich\Client_Data\Sacramento\Sacramento_Flow_Pressure")

For i = 2 To 29
Range("B" & i) = 0
    For Each objFile In objFolder.Files
        If Left(objFile.Name, Len(Range("A" & i))) = Range("A" & i) Then
        Range("B" & i) = 1
        Else
        End If
    Next objFile
Next i

End Sub