求解正如@ z32a7ul指出的那样,我使用了错误的变量来声明FileDialog之后的路径。它应该是OutPathS而不是OutPath。用户输入FileDialog到VBA源文件的路径
什么是代码:我有一个代码读取文件夹中的文件,在活动工作簿中打印名称,然后按升序排列名称。
Obs1:我有以下代码使用这些信息进行计算,但这部分与当前问题无关。
目的:我想创建一个FileDialog,以便用户可以输入源文件所在的文件夹。
问题:我为此创建了一个代码,但由于某些原因,它不读取源文件,即使格式相同。
当我走到这一步:如果我删除这个用户输入,公正“硬编码”的源地址(假设我的采集工作簿是在同一文件夹中他们),一切工作正常。但是,然后我仅限于我可以放置这个“收集者”工作簿的地方。
问题:我没有得到具体的错误行。结果是这个问题,因为它没有找到源文件。有没有人有什么想法在这里做什么?
代码:
Option Explicit
Public path As String
Sub Counter()
Dim count As Integer, i As Long, var As Integer
Dim ws As Worksheet
Dim w As Workbook
Dim Filename As String
Dim FileTypeUserForm As UserForm
Dim X As String
Dim varResult As Variant
Dim OutPath As String, OutPathS As String, wPos As Long
Set w = ThisWorkbook
Application.Calculation = xlCalculationManual
'source input by user
varResult = Application.GetSaveAsFilename(FileFilter:="Comma Separated Values Files" & "(*.csv), *.csv", Title:="OutPath", InitialFileName:="D:StartingPath")
If varResult <> False Then
OutPath = varResult
w.Worksheets("FILES").Cells(1, 4) = varResult
Else
Exit Sub
End If
wPos = InStr(OutPath, "\StartingPath")
OutPathS = Mid(OutPath, 1, wPos - 1)
**'MY ERROR IS HERE, It has to be OutpathS:
path = OutPath & "\*.*" 'this should be: path = OutPathS & "\*.*"**
Filename = Dir(path)
ThisWorkbook.Sheets("FILES").Range("A:A").ClearContents
X = GetValue
If X = "EndProcess" Then Exit Sub
Set ws = ThisWorkbook.Sheets("FILES")
i = 0
Do While Filename <> ""
var = InStr(Filename, X)
If var <> 0 Then
i = i + 1
ws.Cells(i + 1, 1) = Filename
Filename = Dir()
Else: Filename = Dir()
End If
Loop
Range("A2:A" & i).Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlNo 'this will sort the names directly in the "FILES" sheet
Application.Calculation = xlCalculationAutomatic
ws.Cells(1, 2) = i
MsgBox i & " : files found in folder"
End Sub
Function GetValue()
With FileTypeUserForm
.Show
GetValue = .Tag
End With
Unload FileTypeUserForm
End Function
OBS2:有一个公共的变量,因为它会在随后的宏被用于计算。
Obs3:整个filedialog部分只是为了找到源文件的路径。它不保存任何东西。
你可以试试这个:'varResult = Application.GetSaveAsFilename(的FileFilter:= “逗号分隔值(* .csv),* .csv”)' – Vityata
是不是从InitialFileName中缺少一个\?它不应该是“D:\ StartingPath”而不是“D:StartingPath”吗? – z32a7ul
将Mid的结果保存到OutPathS,但从OutPath计算路径(不含S)。 – z32a7ul