Board logo

標題: 如何用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

是這個嗎?
  1. sub openCSV()

  2. dim mydir as string
  3. mydir = thisworkbook.path & "\"
  4. workbooks.opentext filename:=mydir & 123.txt, datatype:=xldelimited, comma:=true

  5. 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

是底下這樣嗎?
  1. Sub nn()
  2.   Call openCSV("123.txt", 3, 6, " ")
  3. End Sub
複製代碼
  1. Sub openCSV(ByVal sFileName$, lStartLine As Long, lLoadLine As Long, sChar$)
  2.   ' sFileName : CSV檔案名稱, lStartLine : 開始列號, lLoadLine : 讀取列數, sChar : 分隔字元
  3.   Dim iI%
  4.   Dim sFullName$, sStr$
  5.   Dim lJ As Long, lPos As Long
  6.   Dim vData
  7.   
  8.   sFullName = ThisWorkbook.Path & "\" & sFileName

  9.   If Dir(sFullName) <> "" Then
  10.     Open sFullName For Input Access Read Shared As #1
  11.       lJ = 1
  12.       Do While lJ < lStartLine
  13.         Line Input #1, sStr
  14.         lJ = lJ + 1
  15.       Loop
  16.       
  17.       For lJ = 1 To lLoadLine
  18.         Line Input #1, sStr
  19.         ReDim vData(0)
  20.         vData = Split(sStr, sChar)
  21. ' 題外話 : Cells(lJ, 1).Resize(, UBound(vData) + 1) = Application.Transpose(vData) 此行結果不正確不知錯在哪裡, 只好改成以下這樣的迴圈...
  22.          For iI = 0 To UBound(vData)
  23.            Cells(lJ, iI + 1) = vData(iI)
  24.          Next iI
  25.       Next lJ
  26.     Close (1)
  27.   Else
  28.     MsgBox ("找不到 " & sFileName & " 檔案")
  29.   End If
  30. End Sub
複製代碼

作者: am0251    時間: 2011-9-28 15:01

[attach]7960[/attach]
謝謝兩位的回覆,只是luhpro大大的寫法有點難,小的沒看懂多少,其實我只是想"匯入"CSV"檔,而不是"開啟"因為我要選擇"分隔符號",如"TAB鍵" "分號" "逗點" "空格" 等方法,還有就是匯入的行數,如這個檔案,我的分隔符號是 "逗點" 和 "空格",匯入的行數只是第2行和第5行,該怎麼寫呢?
作者: GBKEE    時間: 2011-9-28 16:09

回復 6# am0251
  1. Sub Ex()
  2.     Dim 匯出檔 As String, 匯入檔 As Workbook
  3.     Set 匯入檔 = ActiveWorkbook     'Set 匯入檔 = Workbooks("TEST.XLS")
  4.     匯出檔 = "D:\TEST\270710.CSV"
  5.     With Workbooks.Open(匯出檔).Sheets(1)
  6.         .Range("A5").Resize(5).EntireRow.Copy 匯入檔.Sheets(1).[A1]
  7.         '.Range("A5").Resize(5) ->5列  ,  EntireRow 整列範圍
  8.           .Parent.Close False    '關閉 匯出檔
  9.     End With
  10. 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
  1. Sub Ex()
  2.     Dim 匯出檔 As String, 匯入檔 As Workbook
  3.     Set 匯入檔 = ActiveWorkbook
  4.     'Set 匯入檔 = Workbooks("TEST.XLS")
  5.     匯出檔 = "D:\TEST\270710.CSV"
  6.     With Workbooks.Open(匯出檔).Sheets(1)
  7.         匯入檔.Sheets(1).Range("A:A") = .Range("B:B").Value
  8.         匯入檔.Sheets(1).Range("B:B") = .Range("E:E").Value
  9.         .Parent.Close False    '關閉 匯出檔
  10.     End With
  11. End Sub
複製代碼

作者: am0251    時間: 2011-9-30 12:51

謝謝回覆,可是我用"錄製"的方法得到了下面的巨集,有沒有辦法簡單的方法寫出來呢?
  1. Sub csv()
  2. '
  3. ' csv Macro
  4. '

  5. '
  6.     With ActiveSheet.QueryTables.ADD(Connection:= _
  7.         "TEXT;E:\Excel\270710.csv", Destination:=Range("$A$1"))
  8.         .Name = "270710"
  9.         .FieldNames = True
  10.         .RowNumbers = False
  11.         .FillAdjacentFormulas = False
  12.         .PreserveFormatting = True
  13.         .RefreshOnFileOpen = False
  14.         .RefreshStyle = xlInsertDeleteCells
  15.         .SavePassword = False
  16.         .SaveData = True
  17.         .AdjustColumnWidth = True
  18.         .RefreshPeriod = 0
  19.         .TextFilePromptOnRefresh = False
  20.         .TextFilePlatform = 950
  21.         .TextFileStartRow = 1
  22.         .TextFileParseType = xlDelimited
  23.         .TextFileTextQualifier = xlTextQualifierDoubleQuote
  24.         .TextFileConsecutiveDelimiter = True
  25.         .TextFileTabDelimiter = True
  26.         .TextFileSemicolonDelimiter = False
  27.         .TextFileCommaDelimiter = True
  28.         .TextFileSpaceDelimiter = True
  29.         .TextFileColumnDataTypes = Array(1, 1, 9, 9, 1, 1, 1)
  30.         .TextFileTrailingMinusNumbers = True
  31.         .Refresh BackgroundQuery:=False
  32.     End With
  33. 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/)