如何只知道部分文件名时打开文件目录

时间:2014-06-04 19:28:46

标签: vba excel-vba excel

好的,所以我试图使用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然后转到S:\ CLIENTS然后从单元格B10添加值然后继续到FOLDER NAME \然后从单元格B11中抓取Project#,因为这是您可以使用的所有内容,然后将填写丢失的信息,然后继续到\ 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

我的问题是它只将Project#输入到文件名中:但实际上并没有打开它。所以正在寻找一种解析目录的方法,因为我已经从原始代码中删除了#34; * \ Sample"并且它将打开以Project#

开头的唯一文件夹

2 个答案:

答案 0 :(得分:0)

如果你有first part of the file name并想要文件名,那就可以了 如果需要目录名,请将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

答案 1 :(得分:0)

我认为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

这接近你想要达到的目标吗? 顺便说一句,我认为你的 Project#是独一无二的。