我有一个Sub ImportTest1(),它调用函数文件(路径)。导入子似乎工作正常,但我无法确定,因为在设置QueryTable的东西以打开文本文件到excel工作表时,函数部分不起作用。下面的代码就是我现在所拥有的(粗体部分是不起作用的部分),我不确定这是错误的。
Sub ImportTest1()
Dim path As String
'CALL TO OPEN FILE DIALOG BOX
path = opener()
If path = "" Then
Exit Sub
End If
'CALL TO FILE OPEN FUNCTION
files (path)
End Sub
Function opener()
Dim sFile As String
With UserForm1.CommonDialog1
.Filter = "All Files (*.*)|*.*"
.ShowOpen
If Len(.FileName) = 0 Then
Exit Function
End If
sFile = .FileName
End With
Unload UserForm1
opener = sFile
End Function
Function files(path As String)
Workbooks.OpenText FileName:="prt.", Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(1, 1, 1, 1, 1, 1)
End Function
答案 0 :(得分:1)
我认为您可以大大简化代码并处理您想要实现的目标。从我之前的评论和原帖中我可以看出,你想要 A。从用户那里检索文件名和路径。您可以使用以下
执行此操作f = InputBox(Prompt:="Please enter a file path and name.")
这会弹出一个对话框,用户可以在其中输入一些文本。存储在f中的是一个表示文件名和路径的字符串。例如,用户可以键入类似C:\Users\Owner\Desktop\myFile.csv
的内容。
如果您要打开存储在f中的文件,您可以尝试类似您在帖子中已有的内容
Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1,1), Array(2,1), Array(3,1))
这假定输入了一个以3列逗号分隔的文件,但您可以将其修改为您喜欢的任何内容。
总而言之,您可能只需要这四行vba代码来完成您想要完成的任务。你可以把它放到子程序(不是函数)中,就像这样
Sub OpenMyFile()
f = InputBox(Prompt:="Please enter a file path and name.")
Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1,1), Array(2,1), Array(3,1))
ActiveSheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(1, 1)
ActiveWorkbook.Close False
end sub
我希望有所帮助。