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