文件打开提示功能代码不工作 - 不知道为什么

问题描述:

我有一个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

您的FieldInfo不需要采用二维数组的数组吗?我可能是错的,但我认为你需要'FieldInfo:Array(Array(0,1),Array(1,1),Array(2,1),等等)。至少我认为你会需要它当我使用记录宏来查找prt。文件数组是什么并且查看时,使用'Array(1,2,3等)'而不是'Array(1,1,1,...)'。 – 2014-09-03 15:39:44

+0

那是我得到的那部分... – 2014-09-03 15:41:04

+0

你说错误代码行是粗体,但我看不到粗体。错误说的是什么? – 2014-09-03 15:44:25

我认为你可以简化你的代码很多,只是处理你想达到的目标。从我在以前的评论和原文中可以看出的是,您将要到答。从用户检索文件名和路径。你可以用下面的方法做到这一点

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 

我希望有帮助。

+0

有很多混淆和疑问啊,谢谢你,这很容易。是否需要输入文件路径而不是所选文件?只是澄清和定义为:字符串或长或其他什么? – 2014-09-04 14:24:10

+0

注意我编辑来纠正错字,所以使用编辑后的版本。这一小段代码假定用户将一起输入整个路径和文件名。看我的例子:'C:\ Users \ Owner \ Desktop \ myFileName.csv'。 – 2014-09-04 14:26:29

+0

只是文件名:= f然后呢?我认为这会更加复杂,VBA过去几周让我很生气:)感谢您的帮助 – 2014-09-04 14:28:41