Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Różnica w zapisie CSV pomiędzy zapisem z menu Excel a zapisem w kodzie VBA

Fanki 17 Nov 2020 14:31 606 6
  • #1
    Fanki
    Level 6  
    Taki problem, który pewnie jest dla wielu banalny.
    Zapisując plik za pośrednictwem zwykłej funkcji: Zapisz jako i wybierając .CSV rozdzielany przecinkami uzyskuję plik, który przy ponownym otwarciu jest podzielony na kolumny (patrz załącznik: ZDEM_via_..el.csv Download (6.69 kB) ZDEM_via_Excel.csv)

    tymczasem gdy stosuję taki kod do zapisania pliku.
    Code:
    ActiveWorkbook.SaveAs Filename:="C:\ZDEM.csv", FileFormat:=xlCSV, Local:=True, CreateBackup:=False

    otrzymuje wszystkie dane w jednej kolumnie rozdzielone przecinkami (patrz załącznik: ZDEM.csv Download (5.09 kB) ZDEM.csv)

    Ktoś zna przyczynę takiego stanu rzeczy ?
    i ewentualnie zna jakiś sposób na to aby zapis do .csv wykonany przez makro VBA generował plik w takim samym formacie jak zapis z menu ?
  • #2
    ex-or
    Level 27  
    Fanki wrote:
    otrzymuje wszystkie dane w jednej kolumnie

    Nie jest to prawdą. Pola są nadal rozdzielone tylko innym separatorem (którym mogą być też inne znaki np. tabulator). Aby wczytać taki plik do eksela trzeba go "zaimportować" podając explicite znak separatora https://www.copytrans.net/support/how-to-open-a-csv-file-in-excel/ lub otworzyć jak zwykle i otrzymaną jedną kolumnę rozdzielić na pola: https://www.excel-easy.com/examples/text-to-columns.html
    To tak na marginesie. Jak wymusić średnik? Tak jak nasmarowano tutaj: http://www.vbaexpress.com/forum/showthread.php?42769-save-as-csv-file-format/page2 trzeba go ustawić w lokalesach. Ale podobnież, jak to w łyndołsach, nie zawsze działa. Spróbować zawsze można (a nawet trzeba).
  • #3
    Fanki
    Level 6  
    Wiem jak zaimportować plik do Excela o różnych formatach wejściowych, mimo nikłej wiedzy to akurat nie jest dla mnie tajemnicą :-).

    Skoro udało Ci się zidentyfikować, że dane w pliku ZDEM_via_Excel są rozdzielone innym znakiem niż przecinek to jak to się ma do faktu, że zapisując plik wybieram opcję "CSV (rozdzielany przecinkami) (*.csv)": ZDEM_via_..el.jpg Download (11.78 kB)Points: 2 for user
    Tego pliku używamy do importu danych w innym programie (dokładnie w ERP w SAP).

    Chciałbym więc żeby zamiast kopiować dane i klikać "Zapisz jako" .csv, mieć to pod jednym klikiem, stąd wybrałem opcję zapisu poprzez VBA z parametrami:
    Code: vbscript
    Log in, to see the code
    .

    Jak widać przy zapisaniu pliku przez VBA i zastosowaniu
    Code: vbscript
    Log in, to see the code
    format danych jest inny niż przy użyciu przycisku: ""Zapisz jako: CSV (rozdzielany przecinkami)
    Ustawienia lokalne są poprawnie skonfigurowane.

    Stąd moje pytanie o różnicę pomiędzy tymi formatami ?
  • #4
    clubs
    Level 37  
    Fanki wrote:
    Ustawienia lokalne są poprawnie skonfigurowane

    To jeszcze sprawdź "obracając" zapis z
    Code: vbscript
    Log in, to see the code

    na
    Tak jak powinno być
    Code: vbscript
    Log in, to see the code
  • #5
    Fanki
    Level 6  
    clubs wrote:
    Fanki wrote:
    Ustawienia lokalne są poprawnie skonfigurowane

    To jeszcze sprawdź "obracając" zapis z
    Code: vbscript
    Log in, to see the code

    na
    Tak jak powinno być
    Code: vbscript
    Log in, to see the code


    No niestety nie pomogło :-(
  • #6
    Maciej Gonet
    VBA, Excel specialist
    Kolejność argumentów nie powinna tu mieć nic do rzeczy, bo argumenty wywoływane przez nazwy można podawać w dowolnej kolejności.
    Kluczowe jest działanie parametru Local:=True
    W Twoim pierwszym poście pierwszy plik jest rozdzielany średnikami, czyli jest w wersji polskiej, a drugi jest rozdzielany przecinkami, czyli jest w wersji amerykańskiej.
    Ale piszesz, że był generowany z parametrem Local:=True
    Sprawdziłem u siebie ten kod i generuje mi się plik ze średnikami, czyli tak jak powinno być.
    Czyli coś u Ciebie jest nie tak z konfiguracją.
    Sprawdź sobie w trybie bezpośrednim (w VBE) w swoim komputerze, jaki wynik otrzymasz
    Code: vbscript
    Log in, to see the code
    Jeśli jest ustawiony język polski, to wynikiem powinien być średnik.
    Spróbuj też uruchomić ten Twój program do zapisu .csv na innym komputerze z ustawionym językiem polskim i porównaj wyniki.
  • #7
    clubs
    Level 37  
    Maciej Gonet wrote:

    Kluczowe jest działanie parametru Local:=True
    Czyli coś u Ciebie jest nie tak z konfiguracją.

    No tak tylko pisał, że jak zrobi zapisz jako, to csv zapisuje się dobrze(a korzysta z ty samych ustawień reg.) i ten sam plik przez vba to ma źle.
    Najpewniej to zrób reset w ustawieniach regionalnych.