Co to są ListObjects w VBA?
W tabeli zwykle widzimy zestaw danych, ale w terminologii VBA jest znacznie więcej, takich jak zakres całkowitego zakresu listy danych, kolumna jest znana jako kolumna listy, a wiersz jest znany jako wiersz listy i tak dalej , więc aby uzyskać dostęp do tych właściwości, mamy wbudowaną funkcję znaną jako Listobjects, która jest używana z funkcją arkusza.
VBA ListObject to sposób odwoływania się do tabel programu Excel podczas pisania kodu VBA. Korzystając z VBA LISTOBJECTS, możemy tworzyć, usuwać tabele i całkowicie możemy bawić się tabelami Excela w kodzie VBA. Tabele programu Excel są trudne, początkujący, a nawet do pewnego stopnia użytkownicy średnio zaawansowani mają trudności z pracą z tabelami. Ponieważ w tym artykule omówiono odwoływanie się do tabel programu Excel w kodowaniu VBA, lepiej jest mieć dobrą wiedzę na temat tabel w programie Excel.
Gdy dane są konwertowane na tabele, nie pracujemy już z zakresem komórek. Musimy raczej pracować z zakresami tabel, więc w tym artykule pokażemy, jak pracować z tabelami Excela, aby efektywnie pisać kody VBA.
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba.png.webp)
Utwórz format tabeli za pomocą ListObjects w Excel VBA
Na przykład spójrz na poniższe dane programu Excel.
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_2.png.webp)
Korzystając z kodu VBA ListObject, utworzymy format tabeli dla tych danych.
- W przypadku tych danych najpierw musimy znaleźć ostatnio używany wiersz i kolumnę, więc zdefiniuj dwie zmienne, aby to znaleźć.
Kod:
Sub List_Objects_Example1 () Dim LR As Long Dim LC As Long End Sub
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_3.png.webp)
- Aby znaleźć ostatnio używany wiersz i kolumnę, użyj poniższego kodu.
Kod:
LR = Cells (Rows.Count, 1) .End (xlUp) .Row LC = Cells (1, Columns.Count) .End (xlToLeft) .Column
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_4.png.webp)
- Teraz zdefiniuj jeszcze jedną zmienną do przechowywania odniesienia do danych.
Kod:
Dim Rng As Range
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_5.png.webp)
- Teraz ustaw odniesienie do tej zmiennej, używając poniższego kodu.
Kod:
Ustaw Rng = Cells (1, 1) .Resize (LR, LC)
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_6.png.webp)
Teraz musimy użyć metody VBA „ListObject.Add”, aby utworzyć tabelę, a poniżej znajduje się składnia tego samego.
ListObject.Add (Source, XlListObjectHasHeaders, Destination, TableStyleName)
Źródło: to nic, dla jakiego zakresu komórek wstawiamy tabelę. Możemy więc podać tutaj dwa argumenty, tj. „XlSrcRange” i „xlSrcExternal”.
XlListObjectHasHeaders: Jeśli tabela wstawiająca dane ma nagłówki lub nie. Jeśli tak, możemy podać „xlYes”. Jeśli nie, możemy podać „xlNo”.
Miejsce docelowe: to nic innego jak nasz zakres danych.
Styl tabeli: jeśli chcesz zastosować dowolny styl tabeli, możemy zapewnić style.
- Ok, teraz w aktywnym arkuszu tworzymy tabelę, więc poniższy kod utworzyłby dla nas tabelę.
Kod:
Dim Ws As Worksheet Set Ws = ActiveSheet Ws.ListObjects.Add xlSrcRange, xllistobjecthasheaders: = xlYes, Destination: = Rng
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_7.png.webp)
- Następnie musimy nadać nazwę tej tabeli.
Kod:
Ws.ListObjects (1) .name = "EmpTable"
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_8.png.webp)
- Poniżej znajduje się pełny kod w celach informacyjnych.
Kod:
Sub List_Objects_Example1 () Dim LR As Long Dim LC As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row LC = Cells (1, Columns.Count) .End (xlToLeft) .Column Dim Rng As Range Ustaw Rng = Cells (1, 1) .Resize (LR, LC) Dim Ws As Worksheet Set Ws = ActiveSheet Ws.ListObjects.Add xlSrcRange, xllistobjecthasheaders: = xlYes, Destination: = Rng Ws.ListObjects (1) .name = " EmpTable „End Sub
Ok, uruchommy kod i zobaczmy magię.
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_9.png.webp)
Utworzył tabelę na podstawie wspomnianych danych i nadał tabeli nazwę „EmpTable”.
Formatowanie tabel Excela za pomocą VBA ListObjects
Po utworzeniu tabeli Excela możemy pracować z tabelami za pomocą kolekcji VBA ListObject.
- Najpierw zdefiniuj zmienną jako „ListObject”.
Kod:
Sub List_Objects_Example2 () Dim MyTable As ListObject End Sub
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_10.png.webp)
- Teraz ustaw odwołanie do tej zmiennej, używając nazwy tabeli.
Kod:
Sub List_Objects_Example2 () Dim MyTable As ListObject Set MyTable = ActiveSheet.ListObjects ("EmpTable") End Sub
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_11.png.webp)
Teraz zmienna „MyTable” zawiera odniesienie do tabeli „EmpTable”.
- Wprowadź nazwę zmiennej i umieść kropkę, aby zobaczyć właściwości i metody VBA ListObject.
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_12.png.webp)
Na przykład, jeśli chcemy zaznaczyć całą tabelę, to musimy skorzystać z obiektu „Range”, a pod nim użyć metody „Select”.
Kod:
MyTable.Range.Select
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_13.png.webp)
Spowoduje to zaznaczenie całej tabeli danych, w tym nagłówka.
- Jeśli chcesz zaznaczyć tylko zawartość tabeli bez nagłówków, musimy użyć „DataBodyRange”.
Kod:
MyTable.DataBodyRange.Select
![](https://cdn.know-base.net/6631231/vba_listobjects_guide_to_listobject_excel_tables_in_excel_vba_14.png.webp)
W ten sposób możemy bawić się stołami.
- Poniżej znajduje się lista kodów czynności w celach informacyjnych.
Kod:
Sub List_Objects_Example2 () Dim MyTable As ListObject Set MyTable = ActiveSheet.ListObjects ("EmpTable") MyTable.DataBodyRange.Select 'Aby wybrać zakres danych bez nagłówków MyTable.Range.Select' Aby wybrać zakres danych z nagłówkami MyTable.HeaderRowRange.Select ' Wybierz wiersze nagłówków tabeli MyTable.ListColumns (2) .Range.Select 'Aby wybrać kolumnę 2, w tym nagłówek MyTable.ListColumns (2) .DataBodyRange.Select' Aby wybrać kolumnę 2 bez nagłówka End Sub
W ten sposób możemy użyć kolekcji „ListObject” do zabawy z tabelami programu Excel.
Rzeczy do zapamiętania
- VBA ListObject to zbiór obiektów odwołujących się do tabel programu Excel.
- Aby uzyskać dostęp do kolekcji ListObject najpierw, musimy określić, do którego arkusza się odnosimy.