Excel VBA проверяет, существует ли файл с поворотом

В этой теме сложно быть конкретным и кратким, но я стараюсь изо всех сил:

Допустим, у нас есть папка в определенном месте, где мы получаем файлы с именами, например, давайте использовать x1; х2; х3 и т.д.

Затем у нас есть файл excel, в котором у нас есть числа в столбце. бывший. 1; 2; 3; и т.п.

Я написал скрипт, который позволяет щелкать эти числа, чтобы появилось окно проводника для поиска определенного числа в папке.

Например, мы нажимаем цифру «2», и появляется окно проводника с результатом поиска «2x» в этой конкретной папке.

Скрипт выглядит так:

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)

Dim c As String
Dim backup As String

c = Target.Range
backup = "~%3D" & Left(c, 7)

    If Left(c, 1) = "C" And Len(c) > 7 And Right(c, 1) = "$" Then 'this part doesn't really matter
    RetVal = Shell("c:\Windows\explorer.exe ""search-ms:displayname=Search%20Results&crumb=System.Generic.String%3A" & backup & "%20kind%3A%3Dfolder&crumb=location:%5C%5Cserver%5Cbackup$", vbNormalFocus)

    End If

End Sub

Интересно, можно ли как-то узнать, есть ли файл, соответствующий поиску, или его нет. Я имею в виду, что, например, если я нажму на цифру «2» в Excel, откроется проводник, и он покажет файлы, имена которых содержат «x2», или покажет «Нет элементов, соответствующих вашему поиску. "

Я хотел бы вернуть это как-то, чтобы преуспеть, если у нас есть результат поиска или у нас его нет. Даже логическое значение помогло бы мне.

Я не могу использовать обычную проверку, например:

If Dir(folder) = "" Then

потому что у нас может быть несколько файлов с одинаковым именем, и их имя содержит дату их создания. бывший. x1_02_04_2015, а также x1_05_11_2014.

Заранее спасибо!


person Divin3    schedule 18.02.2015    source источник


Ответы (1)


Вы можете попробовать следующее. Вам действительно не нужно использовать какие-либо функции оболочки

     Sub LoopThroughFilesWorkbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
        Dim MyObj As Object, MySource As Object, file As Variant, myBool As Boolean
        file = Dir("c:\testfolder\")
        Do While file <> ""
            Bool = False
            If InStr(file, "test") > 0 Then ' you can change teh condition here to fit your criteria
               myBool = True
               MsgBox ("Found" & file)
            End If
            file = Dir
        Loop
        If Not myBool Then
            MsgBox ("File not found")
        End If
    End Sub
person Jeanno    schedule 18.02.2015
comment
Это почти идеально! Единственная проблема заключается в том, что он перебирает все файлы в папке, и я получаю сообщение о том, что файл не найден один раз для каждого файла. - person Divin3; 18.02.2015
comment
Я обновил свой ответ. Пожалуйста, дайте мне знать, если это работает для вас - person Jeanno; 18.02.2015
comment
Ошибка компиляции: написано: Exit Do not in Do...Loop - person Divin3; 18.02.2015
comment
ой! это был долгий день :(. Исправил снова - person Jeanno; 18.02.2015
comment
мой тоже :), поэтому я убрал Exit Do теперь, если я добавлю имя, которое я ищу, вместо теста, он выводит сообщение для каждого найденного файла, если я использую переменную (target.range), как я должен, Я получаю файл не найден, даже если файл существует. Я чувствую, что мы очень близки! - person Divin3; 18.02.2015
comment
вы изменили file = Dir("c:\testfolder\") на каталог, где находятся ваши файлы? - person Jeanno; 18.02.2015
comment
да, скрипт работает отлично, это был мой косяк. Я понял, что верхний регистр имеет значение, поэтому x не равен X. Я тоже устал. Огромное спасибо за помощь! Я принимаю решение! - person Divin3; 18.02.2015