Vba 如何在只知道部分文件名的情况下打开文件目录

Vba 如何在只知道部分文件名的情况下打开文件目录,vba,excel,Vba,Excel,好的,我试着用2个单元格值快速打开一个文件路径,如果我逐字地知道信息,一切都很好。我的问题是最后一个值,我将只拥有文件名的第一部分,我尝试使用通配符*但似乎无法使其工作。继续获取未找到的路径错误。第二个值是项目名称,但是,文件夹也包含项目的说明。例如,我知道项目名称为TB1756_2156,但文件夹名称为TB1756_2156项目描述负责人2014年1月这是我迄今为止的代码: Sub Button2_Click() ChDrive "S:\" ChDir "S:\C

好的,我试着用2个单元格值快速打开一个文件路径,如果我逐字地知道信息,一切都很好。我的问题是最后一个值,我将只拥有文件名的第一部分,我尝试使用通配符*但似乎无法使其工作。继续获取未找到的路径错误。第二个值是项目名称,但是,文件夹也包含项目的说明。例如,我知道项目名称为TB1756_2156,但文件夹名称为TB1756_2156项目描述负责人2014年1月这是我迄今为止的代码:

     Sub Button2_Click()
     ChDrive "S:\"
     ChDir "S:\CLIENTS " & Range("B10").Value & "\Client1\" & Range("B11").Value & "*\Sample"
     strFile = Application.GetOpenFilename
     End Sub
编辑: 好的,如果我想手动打开我要检查的文件,这将是我的路径:S:\CLIENTS YEAR\FOLDER NAME\Project Description Project Lead YEAR\Sample\file I want.xls vba I want打开对话框并转到S:\CLIENTS,然后从单元格B10中添加值,然后继续到文件夹名称,\n然后从单元格B11中仅获取项目,因为这是您手头的所有内容,然后将填充缺少的信息,然后继续\Sample,用户将在其中选择要打开的文件

因此,操纵@dcromley提供的代码就是我得到的:

    Sub UseFileDialogOpen()
    With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = True
    .InitialFileName = "S:\CLIENTS " & Range("C10").Value & "\FOLDER NAME\ & Range("C11").Value
    .Show
    End With
    End Sub
我的问题是,它只将项目输入到文件名中:但实际上并没有打开它。因此,我正在寻找一种方法来解析目录,因为我已经从原始代码中找到了它,减去*\Sample,它将打开以项目开头的唯一文件夹

,如果您有文件名的第一部分,并且想要文件名,这就可以了。 如果需要目录名,请将vbNormal更改为vbDirectory

Sub Main()
  MsgBox FindFilename("abc", "Z:\untitled\")
End Sub

Function FindFilename$(FirstPart$, DirWhere$)
  Dim sw1&, Filename$
  Do
    If sw1 = 0 Then
      sw1 = 1
      Filename = Dir$(DirWhere, vbNormal)
    Else
      Filename = Dir$()
    End If
    If Filename = "" Then Exit Do
    If FirstPart = Left$(Filename, Len(FirstPart)) Then
      FindFilename = Filename
      Exit Function
    End If
  Loop
  MsgBox "Error - Filename not found"
End Function
编辑: 从Excel 2003帮助中,您现在可以获得完整的初始目录名,对吗

Sub UseFileDialogOpen()
  Dim lngCount&
  With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = True
    .InitialFileName = "Z:\untitled\"
    .Show
    For lngCount = 1 To .SelectedItems.Count
      MsgBox .SelectedItems(lngCount)
    Next lngCount
  End With
End Sub
EDIT2:要打开*.xls文件,请执行以下操作:

Sub Openxls()
  Dim filename$
  filename = "z:\untitled\dave1.xls"
  Workbooks.Open filename
End Sub

我认为dcromley的方法是合理的,但让我们把事情简化一点

Dim prjDir As String, prjName As String
Dim initialFile As String, myDirString As String

'~~> B11 contains part of the foldername
'~~> B10 value as is 
prjDir = "C:\CLIENTS\" & Range("B10") & "\Client1\" & Range("B11") & "*"
prjDir = Dir(prjDir, vbDirectory) '~~> use Dir to get the actual folder name

prjName = "C:\CLIENTS\" & Range("B10") & "\Client1\" & prjDir & "\*SAMPLE*.xls" 
prjName = Dir(prjName, vbNormal) 'use Dir to get the actual filename

initialFile = "C:\CLIENTS\" & Range("B10") & "\Client1\" & prjDir & "\" & prjName

With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Add "Excel Files", "*.xls"
    .FilterIndex = 1
    .InitialFileName = initialFile
    .AllowMultiSelect = False
    If .Show = False Then MsgBox "Please select Excel file.", vbExclamation: Exit Sub
    myDirString = .SelectedItems(1)
    .Filters.Clear
End With

Workbooks.Open myDirString '~~> Open the file
这接近你想要实现的目标吗?
顺便说一句,我认为你的项目是独一无二的。

谢谢你,我已经测试了vbDirectory的代码,它很好地告诉了我项目的全名。然而,这并不是我想要的。我使用我的代码使用一个打开的对话框来选择一个目录路径,然后用户将从单元格值指示的路径中选择一个文件。虽然我喜欢你能够打印出目录名的全名,但我需要实际打开该路径,有什么线索吗?@user258122-我从Excel帮助中添加了代码,应该可以做到这一点。我感谢你的帮助,但仍然不是我要找的,也许我没有很好地解释我自己,我会进一步尝试。好的,如果我想手动打开我想检查的文件,这将是我的路径:我感谢你的帮助,但仍然不是我想要的,也许我没有很好地解释我自己,我会进一步尝试。我将补充我的问题,因为评论中没有足够的空间来解释。另一个镜头-我在我的答案中添加了EDIT2。我是一名老年人,在分析这个问题时遇到困难。也许我们会因为继续这样下去而被警察开枪。