好的,所以我试图使用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#
开头的唯一文件夹答案 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#是独一无二的。