2013-07-24 73 views
6

我想設置一個Excel VBA代碼,打開一些CSV文件,並將字符「|」包含和分隔的信息分成列。我設法打開文件,但我使用的代碼打開我的文件,而不會根據分隔符分割文本。自2天以來我一直堅持這一點。 到目前爲止,我已經嘗試下面的代碼:打開由管道字符「|」分隔的csv文件或不是共同的分隔符

Sub OpenCSV() 

Dim wkbTemp As Workbook 
Dim sPath As String, sName As String 

sPath = ThisWorkbook.Path & "\CSV_Files\" 
sName = "Test.csv" 

Set wkbTemp = Workbooks.Open(Filename:=sPath & sName, Format:=6, Delimiter:="|") 

End Sub 

沒有任何人有什麼建議?

感謝

阿爾貝託

+0

http://stackoverflow.com/questions/30725472/texttocolumns-function-uses-wrong-delimiter –

回答

0

Delimiter:= Chr(124) 

字124試試吧是管道 「|」

+0

沒有,只是testet,沒有工作...... – KekuSemau

2

我試過這樣做。它不起作用。但是,如果您嘗試在文本文件上執行相同操作(將csv內容複製到文本文件中),它就可以工作。

如果你看一下MSDN Link,它明確表示,「如果它是一個文本文件」中「workbooks.open」方法「分隔符」參數的描述。也許這是它不起作用的原因。

我不確定。這對我來說也是一件新事物。希望這可以幫助。

+0

感謝您的回覆,通過改變擴展它的工作原理! – Agr

2

我記得有些時候這讓我瘋了。
似乎Excel對.csv文件有不受控制的貪婪。如果你只是改變結局(.txt.dat或其他),它會工作!

+0

感謝您的回覆,我在VBA中設置了擴展更改,現在它工作正常! – Agr

0

我認爲這應該對你有幫助。

Sub OpenCSV() 

Dim wkbTemp As Workbook 
Dim sPath As String, sName As String 

sPath = ThisWorkbook.Path & "\CSV_Files\" 
sName = "Test.csv" 
Workbooks.OpenText Filename:=sPath & sName, _ 
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _ 
    , Comma:=False, Space:=False, Other:=True, OtherChar:="|" 
Set wkbTemp = ActiveWorkbook 

end sub 
+0

感謝您的回覆,雖然沒有工作.. – Agr

0

Rowan的解決方案確實有效。關鍵是在他的解決方案中用「Test.txt」替換「\ CSV_Files \」位置中的文件名「Test.csv」。 「Test.txt」不應該是逗號分隔值類型。它應該是一個真正的TXT文件類型。

在Windows資源管理器中檢查文件類型。確保它不是CSV。如果使用CSV類型,實際上會告訴Excel數據是用逗號而不是管道分隔符來分析的。

如果您的工作簿是在根目錄:C:\ 創建目錄:C:\ CSV_Files 把文本文件:Test.txt的目錄\ CSV_Files

在您打開工作簿VBA和複製完整下面的VBA代碼。

完整的VBA代碼應該閱讀:

Sub OpenCSV() 

Dim wkbTemp As Workbook 
Dim sPath As String, sName As String 

sPath = ThisWorkbook.Path & "\CSV_Files\" 
sName = "Test.txt" 
Workbooks.OpenText Filename:=sPath & sName, _ 
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _ 
    , Comma:=False, Space:=False, Other:=True, OtherChar:="|" 
Set wkbTemp = ActiveWorkbook 

end sub 

關閉VBA和運行宏。

0
Option Explicit 
Private Sub Text2Excel() 
Dim excel_app As Excel.Application 
Dim max_col As Integer 
Dim txtFromFile As Variant 
Dim Sep As String 

    'DoEvents 

Application.ScreenUpdating = False 

    txtFromFile = Application.GetOpenFilename(FileFilter:="Text Files (*.txt),*.txt," & _ 
               "CSV Files (*.csv),*.csv") 
    If txtFromFile = False Then 
     '''''''''''''''''''''''''' 
     ' user cancelled, get out 
     '''''''''''''''''''''''''' 
     Exit Sub 
    End If 

    Sep = Application.InputBox("Enter a separator character." & vbNewLine & "For TAB Delimited keep BLANK.", Type:=2) 

    If Sep = vbNullString Then 
     ' user cancelled, get out 
     Sep = vbTab 
    End If 

    'Pull the data from test file to activesheet 

    Workbooks.OpenText FileName:=txtFromFile, DataType:=xlDelimited, Other:=True, otherchar:=Sep, local:=True 

    MsgBox "Data from selected file " & txtFromFile & " has been pulled to Excel.", vbInformation 

Application.ScreenUpdating = False 

End Sub 
+1

您能否添加一些解釋? –

0
Sub CSVtoXLS() 
Dim xFd As FileDialog 
Dim xSPath As String 
Dim xCSVFile As String 
Dim xWsheet As String 
Dim xOtherChar As String 
    Application.DisplayAlerts = False 
    Application.StatusBar = True 
    xWsheet = ActiveWorkbook.Name 
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker) 
    xFd.Title = "Select a folder:" 
    If xFd.Show = -1 Then 
      xSPath = xFd.SelectedItems(1) 
    Else 
     Exit Sub 
    End If 
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\" 
    xCSVFile = Dir(xSPath & "*.csv") 
    xOtherChar = InputBox("Please indicate delimiter:", "CSV file/Text to column Converter", ",") 
    Do While xCSVFile <> "" 
     Application.StatusBar = "Converting: " & xCSVFile 
     Workbooks.OpenText Filename:=xSPath & xCSVFile, DataType:=xlDelimited, Tab:=True, Other:=True, OtherChar:=";" 
     ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlWorkbookDefault 
     ActiveWorkbook.Close 
     Windows(xWsheet).Activate 
     xCSVFile = Dir 
    Loop 
    Application.StatusBar = False 
    Application.DisplayAlerts = True 
End Sub 
相關問題