W pracy mamy dwa systemy, jeden stary i jeden nowy, więc naturalnie nie działają dobrze razem. Nowy system eksportuje pliki Excel, podczas gdy stary system wykorzystuje CSVS. W nowym skoroszycie, stworzyłem zapytanie o zapytań, aby zaimportować pobrany plik Excel i sformatować go blisko tego, czego potrzebuje stary system. Ma to dodatkową zaletę właśnie pobieranie zaktualizowanych plików i uderzenia odświeżania w skoroszytowym, który stworzyłem, aby sformatować dane. Muszę jednak podzielić te dane do wielu plików CSV na podstawie danych w jednej kolumnie. Zwykle mogłem po prostu filtrować, kopiować, a następnie wkleić, ale w tej kolumnie jest około 23 działów i ponad tysiąc wierszy w pliku Excel. Zrobiłem trochę poszukiwania i natknąłem się na ten przewodnik: https://www.howtoexcel.org/vba/how-to-export-your-data-into-separate-workbook-based-on-he-values-in-a-Column/ / a >.

Jest to prawie idealne i lubię pomysł przycisku. Chociaż mój stół będzie miał tylko 5 kolumn. Wskazałem na to, jak zapisać jako .csv i wyjmować skrzynkę rozwijaną na "Kod twardy" nagłówek kolumny, który chcę. Jednak nie pomyślałem, jak zrobić zakres, którego potrzebuję do wyboru tabeli.

ws.Range("Data[#All]").SpecialCells(xlCellTypeVisible).Copy

"Dane" to nazwa tabeli, która rozpoczyna się w wierszu 4. Muszę wyeliminować wiersz nagłówka z i piątej kolumny z eksportu. Liczba wierszy w tabeli będzie się różnić w zależności od pobrania. Jak odejmować górny wiersz i ostatnią kolumnę?

Wielkie dzięki, Jon

-2
Dycius 25 lipiec 2020, 19:25

1 odpowiedź

Najlepsza odpowiedź

Łatwiej jest użyć tutaj ListObject, dostęp do DataBodyRange (który jest korpusem tabeli, więc wyklucza nagłówek), a następnie przy użyciu Resize, aby zdobyć tylko pierwsze 4 kolumny:

Dim table As ListObject
Set table = ws.ListObjects("Data")

table.DataBodyRange.Columns(1).Resize(,4).SpecialCells(xlCellTypeVisible).Copy
1
BigBen 25 lipiec 2020, 17:26