2014-09-03 36 views
0

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

回答

1

我認爲你可以簡化你的代碼很多,只是處理你想達到的目標。從我在以前的評論和原文中可以看出的是,您將要到答。從用戶檢索文件名和路徑。你可以用下面的方法做到這一點

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

相關問題