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

[Solved] EXCEL VBA eksport do csv / warunki

PSmts 23 Dec 2021 13:19 336 5
  • #1
    PSmts
    Level 3  
    Moje makro generuje csv ze wskazanego arkusza:

    Sub create_csv()
        Dim FileName As String
        Dim PathName As String
        Dim ws As Worksheet
        
        Set ws = ActiveWorkbook.Sheets("cześci")
        
        FileName = "zestawy części.csv"
        PathName = Application.ActiveWorkbook.Path
        ws.Copy
        ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _
            FileFormat:=xlCSVUTF8 ', Local:=True
            ', CreateBackup:=False
            ActiveWorkbook.Close
    End Sub
    


    Chciałbym aby dla danych ze wskazanego arkusza wygenerował csv ale po odfiltrowaniu czyli np dla kolumny "ID" tylko puste i kolumny "/category@name[pol]" = Produkt B

    Kombinuje bez efektu już jakiś czas.
    Proszę o pomoc.

    P.
  • Helpful post
    #2
    Maciej Gonet
    VBA, Excel specialist
    Spróbuj takiego kodu:
    Code: vbscript
    Log in, to see the code
    Zakładam, że w arkuszu "części" masz aktywny filtr.
  • #3
    PSmts
    Level 3  
    Bardzo dziękuje za pomoc

    Eksport do csv malina, zmieniłem

    Set wscsv = ActiveWorkbook.Sheets("DO csv") na

    Set wscsv = ActiveWorkbook.Sheets("Temp"), gdzie Temp jest z atrybutem verryHidden.

    Przy generowaniu csv plik zamyka się bez zapisu zmian. Czy można aby był w otwarty i gotowy do kolejnego csv ?

    Pozdrawiam

    P.
  • #4
    PSmts
    Level 3  
    Eksport do csv malina, zmieniłem tylko

    Set wscsv = ActiveWorkbook.Sheets("DO csv") na

    Set wscsv = ActiveWorkbook.Sheets("Temp"), gdzie Temp jest z atrybutem verryHidden.

    Plik zamyka się bez zapisu przy generowaniu csv, Czy można aby był otwarty i tym samym przygotowany do generowania nowego csv ?

    Próbowałem wyłączyć

    ActiveWorkbook.Close co daje mizerne efekty, arlusz z przyciskiem zmienia nazwę a plik staję przyjmuje rozszerzenie csv

    P.
  • Helpful post
    #5
    Maciej Gonet
    VBA, Excel specialist
    W Twoim kodzie było:
    Code: vbscript
    Log in, to see the code
    Ja tę linijkę po prostu przepisałem.

    Gdy zapisuje się plik pod nową nazwą przez SaveAs, otwarty skoroszyt przyjmuje nazwę zmienioną pod którą był zapis. Nie wiem, czy można zmienić nazwę otwartego skoroszytu inaczej niż przez zapisanie go.
    Zatem w tym przypadku proponuję ponowny zapis skoroszytu pod starą nazwą.
    Ewentualnie można pozostawić nazwę z rozszerzeniem .csv otwartego pliku roboczego jeśli ma być kilka razy wykorzystywany, a na koniec go zamknąć bez zapisywania.
    Tylko w tym kodzie nazwa zapisywanego pliku .csv jest stała - więc będzie się pojawiać pytanie o zgodę na nadpisanie poprzedniego pliku. Ten kod nie był pomyślany do wykorzystania w pętli. Trzeba te pliki .csv przenosić w inne miejsce lub zmieniać im nazwy.

    P.S. Poprawiałem pierwotny kod, jeśli naniosłeś jakieś zmiany, to wprowadź je do nowego pliku jeszcze raz.
  • #6
    PSmts
    Level 3  
    Ścieżka zapisywanego csv zdefiniowana jest w makro jako lokalizacja pliku źródłowego. Więc ustawiajac filtr(y) i uruchamiając makro tworzy csv w podanej lokalizacji. Jesli zmienię ustawienia filtrów i generuje jeszcze raz csv (powinien być nadpisany po uprzednim zapytaniu o zgodę) to kolejny csv "leci" w kosmos - jakby gubi lokalizację gdzie powinien być zapisany. Więc po wygenerowaniu csv muszę zamknąć plik, otworzyć ustawić filtry i uruchomić makro ponownie. Inaczej mówiąc jesli wygeneruje csv i zmienie jego nazwę to kolejny csv już nie znajdzie lokalizacji chyba że zamknę plik i uruchomie go ponownie.

    Ale to już mały pikuś. Działa super. O to mi chodziło.
    Bardzo dziekuję i zamykam temat.