標題:
如何用VBA匯入CSV檔?
[打印本頁]
作者:
am0251
時間:
2011-9-3 17:09
標題:
如何用VBA匯入CSV檔?
本帖最後由 am0251 於 2011-9-6 16:26 編輯
有高手可以教我一下如何用VBA匯入CSV檔呢?還可以自選列和分隔的符號,謝謝~~!
作者:
jimmyhk
時間:
2011-9-6 09:48
回復
1#
am0251
是這個嗎?
sub openCSV()
dim mydir as string
mydir = thisworkbook.path & "\"
workbooks.opentext filename:=mydir & 123.txt, datatype:=xldelimited, comma:=true
end sub
複製代碼
作者:
am0251
時間:
2011-9-6 16:43
本帖最後由 am0251 於 2011-9-6 16:52 編輯
謝謝回復,開啟是沒問題,可是我只想匯入我想要的行數,又該怎麼寫呢?
作者:
GBKEE
時間:
2011-9-27 17:45
回復
3#
am0251
可是我只想匯入我想要的行數
這樣的問法,很空洞的 難怪沒人回答
要附上文字檔: 說明要搜尋的特定的字串? 如何 匯入? 何時停止匯入?
作者:
luhpro
時間:
2011-9-27 23:25
本帖最後由 luhpro 於 2011-9-27 23:27 編輯
有高手可以教我一下如何用VBA匯入CSV檔呢?還可以自選列和分隔的符號,謝謝~~!
am0251 發表於 2011-9-3 17:09
是底下這樣嗎?
Sub nn()
Call openCSV("123.txt", 3, 6, " ")
End Sub
複製代碼
Sub openCSV(ByVal sFileName$, lStartLine As Long, lLoadLine As Long, sChar$)
' sFileName : CSV檔案名稱, lStartLine : 開始列號, lLoadLine : 讀取列數, sChar : 分隔字元
Dim iI%
Dim sFullName$, sStr$
Dim lJ As Long, lPos As Long
Dim vData
sFullName = ThisWorkbook.Path & "\" & sFileName
If Dir(sFullName) <> "" Then
Open sFullName For Input Access Read Shared As #1
lJ = 1
Do While lJ < lStartLine
Line Input #1, sStr
lJ = lJ + 1
Loop
For lJ = 1 To lLoadLine
Line Input #1, sStr
ReDim vData(0)
vData = Split(sStr, sChar)
' 題外話 : Cells(lJ, 1).Resize(, UBound(vData) + 1) = Application.Transpose(vData) 此行結果不正確不知錯在哪裡, 只好改成以下這樣的迴圈...
For iI = 0 To UBound(vData)
Cells(lJ, iI + 1) = vData(iI)
Next iI
Next lJ
Close (1)
Else
MsgBox ("找不到 " & sFileName & " 檔案")
End If
End Sub
複製代碼
作者:
am0251
時間:
2011-9-28 15:01
[attach]7960[/attach]
謝謝兩位的回覆,只是luhpro大大的寫法有點難,小的沒看懂多少,其實我只是想"匯入"CSV"檔,而不是"開啟"因為我要選擇"分隔符號",如"TAB鍵" "分號" "逗點" "空格" 等方法,還有就是匯入的行數,如這個檔案,我的分隔符號是 "逗點" 和 "空格",匯入的行數只是第2行和第5行,該怎麼寫呢?
作者:
GBKEE
時間:
2011-9-28 16:09
回復
6#
am0251
Sub Ex()
Dim 匯出檔 As String, 匯入檔 As Workbook
Set 匯入檔 = ActiveWorkbook 'Set 匯入檔 = Workbooks("TEST.XLS")
匯出檔 = "D:\TEST\270710.CSV"
With Workbooks.Open(匯出檔).Sheets(1)
.Range("A5").Resize(5).EntireRow.Copy 匯入檔.Sheets(1).[A1]
'.Range("A5").Resize(5) ->5列 , EntireRow 整列範圍
.Parent.Close False '關閉 匯出檔
End With
End Sub
複製代碼
作者:
am0251
時間:
2011-9-29 13:19
本帖最後由 am0251 於 2011-9-29 13:25 編輯
謝謝回覆,可能是我表達的不是很好,這個檔案是我用"資料 - 從文字檔"的方法匯入的,"SHEET1"分隔符號是用了,"逗點" 和 "空格","SHEET2"就是我要的目的了,只有第2和第5行匯入了,我只是沒辦法寫出來........[attach]8037[/attach]
作者:
GBKEE
時間:
2011-9-29 14:53
回復
8#
am0251
Sub Ex()
Dim 匯出檔 As String, 匯入檔 As Workbook
Set 匯入檔 = ActiveWorkbook
'Set 匯入檔 = Workbooks("TEST.XLS")
匯出檔 = "D:\TEST\270710.CSV"
With Workbooks.Open(匯出檔).Sheets(1)
匯入檔.Sheets(1).Range("A:A") = .Range("B:B").Value
匯入檔.Sheets(1).Range("B:B") = .Range("E:E").Value
.Parent.Close False '關閉 匯出檔
End With
End Sub
複製代碼
作者:
am0251
時間:
2011-9-30 12:51
謝謝回覆,可是我用"錄製"的方法得到了下面的巨集,有沒有辦法簡單的方法寫出來呢?
Sub csv()
'
' csv Macro
'
'
With ActiveSheet.QueryTables.ADD(Connection:= _
"TEXT;E:\Excel\270710.csv", Destination:=Range("$A$1"))
.Name = "270710"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 950
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 9, 9, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
複製代碼
作者:
toromru
時間:
2015-9-16 15:11
回復
2#
jimmyhk
你好 想詢問 這樣開啟後 有辦法自動另存到指定位址的xls檔案嗎?
如指定到 "C:\test" 這樣!!!
作者:
ikboy
時間:
2015-9-16 21:19
回復
11#
toromru
sub zz()
sheets.copy
activeworkbook.saveas "test"
end sub
'發自我的小米手機
作者:
toromru
時間:
2015-9-18 11:22
回復
9#
GBKEE
您好 想詢問 這樣直接匯入 中文會變成亂碼 會有解嗎?!
作者:
GBKEE
時間:
2015-9-19 06:24
回復
13#
toromru
參考這裡
http://forum.twbts.com/viewthread.php?tid=8522
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)