Excel VBA检查文件是否存在扭曲

Excel VBA检查文件是否存在扭曲,vba,excel,file-exists,Vba,Excel,File Exists,这个话题很难做到具体和简短,但我尽了最大努力: 假设我们在一个特定的位置上有一个文件夹,在那里我们可以得到具有名称的文件,例如,让我们使用x1;x2;x3等 然后我们有一个excel文件,其中列中有数字。例1;2.3.等等 我编写了一个脚本,可以单击这些数字,这样浏览器窗口就会弹出,搜索文件夹中的特定数字 例如,我们点击数字“2”,一个浏览器窗口将弹出,搜索结果为该特定文件夹中的“2x” 脚本如下所示: Private Sub Workbook_SheetFollowHyperlink(ByVa

这个话题很难做到具体和简短,但我尽了最大努力:

假设我们在一个特定的位置上有一个文件夹,在那里我们可以得到具有名称的文件,例如,让我们使用x1;x2;x3等

然后我们有一个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
我想知道是否有可能,以某种方式,找出是否有一个文件匹配的搜索或它不存在。我的意思是,例如,如果我在excel中单击数字“2”,浏览器将弹出,它将显示名称包含“x2”的文件,或者它将显示“没有与您的搜索匹配的项目。

如果我们有搜索结果我们没有,我想以某种方式将其返回excel。 即使是布尔运算也能帮我

我不能使用普通支票,如:

If Dir(folder) = "" Then
因为我们可以有多个同名文件,并且它们的名称包含创建日期。例如,x1_02_04_2015,我们也可以有x1_05_11_2014


提前谢谢你

您可以尝试以下方法。您实际上不需要使用任何shell功能

     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
Sub-LoopThroughFilesWorkbook\u SheetFollowHyperlink(ByVal Sh作为对象,ByVal Target作为超链接)
Dim MyObj作为对象,MySource作为对象,file作为变量,myBool作为布尔值
file=Dir(“c:\testfolder\”)
文件“”时执行此操作
Bool=False
如果InStr(file,“test”)>0,则可以在此处更改条件以符合您的标准
myBool=True
MsgBox(“找到”和文件)
如果结束
file=Dir
环
如果不是myBool那么
MsgBox(“未找到文件”)
如果结束
端接头

它几乎完美无瑕!唯一的问题是,它会在文件夹中的所有文件中循环,并且我会在更新答案的每个文件中得到一次“未找到”消息文件。请让我知道这是否适用于您编译错误:它说:退出不在Do…Loopoops内!这是漫长的一天:(.也修复了它:)所以我现在拿出了“退出做”如果我添加我搜索的名称而不是“测试”,它会为它找到的每个文件弹出一条消息,如果我使用一个变量(target.range),我会得到“未找到文件”,即使该文件存在。我觉得我们很接近!