【问题标题】:How to open a file directory when only know part of the file name只知道部分文件名时如何打开文件目录
【发布时间】:2025-12-05 21:25:01
【问题描述】:

好的,所以我正在尝试使用 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 中获取项目#,因为这就是你需要的所有东西,然后填写丢失的信息,然后继续到 \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”,并且它将打开唯一以项目开头的文件夹#

【问题讨论】:

  • 另一个镜头——我将 EDIT2 添加到我的答案中。我是一名老年人,无法分析这一点。也许我们会因为这样继续下去而被 SO 警察枪杀。

标签: vba excel


【解决方案1】:

如果您有 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

【讨论】:

  • 谢谢我已经测试了 vbDirectory 的代码,它在告诉我全名方面做得很好。然而,这并不是我想要的。我使用我的代码使用打开对话框来选择目录路径,然后用户将从单元格值指示的路径中选择一个文件。虽然我喜欢您能够打印目录名称的全名,但我需要实际打开该路径,有什么线索吗?
  • @user258122 - 我从 Excel 帮助中添加了应该执行此操作的代码。
  • 感谢您的帮助,但仍然不是我想要的,也许我没有很好地解释自己,我会进一步尝试。好的,如果我在哪里手动打开我想要检查的文件,这将是我的路径:
  • 感谢您的帮助,但仍然不是我想要的,也许我没有很好地解释自己,我会进一步尝试。我会补充我的问题,因为 cmets 没有足够的空间来解释。
【解决方案2】:

我认为 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 # 是独一无二的。

【讨论】: