2013-07-24 14 views
6

Próbuję skonfigurować kod excel vba, który otwiera niektóre pliki csv i podzielić na kolumny informacje zawarte i rozdzielone przez znak "|". Udaje mi się otworzyć plik, ale kod, którego używam, otwiera moje pliki bez dzielenia tekstu zgodnie z ogranicznikiem. Utknąłem na tym od 2 dni. Do tej pory próbowałem poniższy kod:Otwarty plik csv rozdzielany znakami potoku "|" lub nie common delimiter

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 

Czy ktoś ma sugestie?

Dzięki

Alberto

+0

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

Odpowiedz

0

Spróbuj z

Delimiter:= Chr(124) 

Charakter 124 jest rura "|"

+0

Nie, tylko testowałem, nie działa ... – KekuSemau

2

Próbowałem to zrobić. To nie działa. Ale jeśli spróbujesz zrobić to samo na pliku tekstowym (przez kopiowanie wklejania zawartości CSV do pliku tekstowego), to działa.

Jeśli spojrzeć na MSDN Link, to wyraźnie mówi, że „Jeśli jest to plik tekstowy” w opisie parametru „ogranicznika” z „workbooks.open” metody. Może to jest powód, dla którego to nie działa.

Nie jestem pewien. To także jest dla mnie nowe. Mam nadzieję że to pomoże.

+0

Dziękuję za odpowiedź, zmieniając rozszerzenie działa! – Agr

2

Pamiętam, że to doprowadziło mnie do szału.
Wygląda na to, że Excel ma niekontrolowaną chciwość plików .csv. Jeśli po prostu zmienisz końcówkę (.txt, .dat lub cokolwiek innego), to zadziała!

+0

Dziękuję za odpowiedź, ustawiłem zmianę rozszerzenia w VBA i teraz działa dobrze! – Agr

0

Myślę, że to powinno ci pomóc.

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

Dziękuję za odpowiedź, ale to nie zadziałało. – Agr

0

Rozwiązanie Rowan faktycznie działa. Kluczem jest zastąpienie nazwy pliku "Test.csv" w jego rozwiązaniu za pomocą "Test.txt" w lokalizacji "\ CSV_Files \". Plik "Test.txt" nie powinien być oddzielonym przecinkami typem wartości. Powinien to być prawdziwy typ pliku TXT.

Sprawdź typ pliku w Eksploratorze Windows. Upewnij się, że nie jest to plik CSV. Jeśli użyjesz typu CSV, w rzeczywistości powiesz programowi Excel, że dane są analizowane przez przecinek, a nie ogranicznik potoku.

Jeśli skoroszyt znajduje się w katalogu głównym C: \ Tworzenie katalogu: C: \ CSV_Files Umieść plik tekstowy: Test.txt w katalogu \ CSV_Files

W skoroszycie otwarty VBA i skopiuj pełny Kod VBA poniżej.

pełnego kodu VBA powinni przeczytać:

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 

Zamknij VBA i uruchomić makro.

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

Czy mógłbyś dodać jakieś wyjaśnienie? –

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