2012-11-21 14 views
8

Niedawno musiałem skopiować niektóre dane do arkusza kalkulacyjnego, użyć formatu VBA, aby go sformatować, a następnie zapisać ten arkusz w pliku CSV. Używam następującego kodu:Jak zapisać plik CSV rozdzielany średnikiem, używając vba?

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV 

ws jest arkuszem roboczym, który zapisałem.

To daje mi plik CSV rozdzielany przecinkami.

Chciałbym jednak zapisać ten arkusz w pliku rozdzielanym średnikami. Zrobiłem niektóre googling i stwierdzono następujące rozwiązanie:

  1. przejdź do Start> Ustawienia> regionalne i językowe Opcje
  2. kliknąć na przycisk Dostosuj
  3. Dalej do listy typ separatora w średnikiem (;)

śledzę powyższe procedury i zmienił mojego kodu:

ws.SaveAs Filename:=filestr, Fileformat:=xlCSV, Local:=True 

Ale stil Dostałem plik CSV rozdzielany przecinkami jako wynik.

wersji programu Excel używam jest Excel 2003, a mój system operacyjny to Windows XP

Czy ktoś może sugerować, jak zaoszczędzić średnikiem plik rozdzielany za pomocą VBA?

+3

Oto sposób zrobienia tego ręcznie; http://stackoverflow.com/a/7079703/246342 zastąp separator przez ";" i zasięg z ActiveSheet.UsedRange –

+0

Bardzo dziękuję za sugestię. Ale napotkałem problem, gdy próbowałem uruchomić twój kod. W arkuszu kalkulacyjnym mam pewną wartość, jak "1.0000000", a gdy jest ona przekształcona na ciąg przez "CStr (c.Value)", jest automatycznie zaokrąglana do "1". Czy możesz zasugerować, jak sobie z tym poradzić? Dzięki :) – user1758952

+1

Aby zachować formatowanie należy zastąpić 'CStr (c.Value)' z 'c.text' –

Odpowiedz

0

Wystarczy użyć tego kodu: ActiveWorkbook.SaveAs "My FILE.CSV" xlCSV, lokalny: = True

(nie stosować: Nazwa pliku: =)

+1

Użyj" Filename: = "lub nie, nic nie zmieni –

10

Właśnie to sprawdzone ponieważ miał ten sam problem. Nazwa pliku nie ma w tym przypadku żadnej funkcji.

To co pracował dla mnie:

With ActiveWorkbook 
    .SaveAs Filename:="My File.csv", FileFormat:=xlCSV, Local:=True 
    .Close False 
End With 

W ustawieniach regionalnych ->; < - jako separator listy. Ważne jest również, aby nie zapisywać zmian podczas zamykania -> przy użyciu przycisku Zamknij należy użyć False.

+1

działa jak urok ... ale konieczne jest skonfigurowanie ".zamknij fałsz"! thx –

+0

Korzystam z programu Excel 2007 i tylko po wywołaniu ". Zamknij fałszywe" mój plik CSV został zapisany przy użyciu ";" jako separator listy. Dzięki! – cantoni

0

Aby użyć skryptu VBS po zakończeniu budowy:

.SaveAs Nazwa pliku, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1

gdzie argumenty to:

Object Filename, 
Object FileFormat, 
Object Password, 
Object WriteResPassword, 
Object ReadOnlyRecommended, 
Object CreateBackup, 
XlSaveAsAccessMode AccessMode, 
Object ConflictResolution, 
Object AddToMru, 
Object TextCodepage, 
Object TextVisualLayout, 
Object Local 

SourceLink: https://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.workbook.saveas.aspx

Last "1" w „SaveAs” funkcja jest równa Local = True

również średnik musi być zdefiniowany jako separator listy w ustawieniach regionalnych systemu operacyjnego (patrz odpowiedź wyżej)

1

Nie trzeba zadeklarować wszystkie var iables, po prostu dodaj local: = true na końcu metody SaveAs, na przykład:

ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True 
Powiązane problemy