Bu öğretici, VBA'da Tablolar ve ListObjects ile nasıl çalışılacağını gösterecektir.
VBA Tabloları ve ListObjects
Tablolar, Excel'in en kullanışlı ve güçlü özelliklerinden biridir, bu eğitimde, bir tablo oluşturmak, bir tabloya basit bir sıralama eklemek, bir tabloyu filtrelemek ve tabloyla ilgili diğer görevleri gerçekleştirmek için VBA'nın nasıl kullanılacağını inceleyeceğiz.
VBA ile Tablo Oluşturun
ListObjects.Add Yöntemi, çalışma sayfasındaki bir aralığa dayalı olarak bir çalışma sayfasına tablo ekleyebilir. Sayfa1 adlı bir çalışma sayfasında ($A$1:$B$8) gösterilen aralığa sahibiz.
Aşağıdaki kod, varsayılan Tablo Stilini kullanarak ($A$1:$B$8) aralığına göre çalışma sayfanıza Tablo1 adlı bir tablo ekler:
123456 | Alt CreateTableInExcel()ActiveWorkbook.Sheets("Sheet1").ListObjects.Add(xlSrcRange, Range("$A$1:$B$8"), , xlYes).Name = _"Tablo 1"Alt Bitiş |
Sonuç:
VBA ile Tablonun Sonuna Sütun Ekleme
Tablonuzun sonuna bir sütun eklemek için ListColumns.Add yöntemini kullanabilirsiniz. Aşağıda gösterilen Table1 adlı tablomuz var.
Her zaman tablonun sonuna bir sütun ekleyecek olan aşağıdaki kodu kullanarak tablonuza bir sütun ekleyebilirsiniz:
12345 | Alt AddColumnToTheEndOfTheTable()ActiveWorkbook.Sheets("Sayfa1").ListObjects("Tablo1").ListColumns.AddAlt Bitiş |
Sonuç:
VBA ile Tablonun En Altına Satır Ekleme
Tablonuzun altına bir satır eklemek için ListRows.Add yöntemini kullanabilirsiniz. Aşağıda gösterilen Table1 adlı tablomuz var.
Aşağıdaki kod her zaman tablonuzun altına bir satır ekleyecektir.
12345 | Alt AddRowToTheBottomOfTheTable()ActiveSheet.ListObjects("Table1").ListRows.AddAlt Bitiş |
Sonuç:
VBA ile Basit Sıralama Ekleme
VBA ile bir tabloyu sıralayabilirsiniz. Aşağıda gösterilen Table1 adlı tablomuz var ve Satış Sütununu en düşükten en yükseğe sıralamak için VBA'yı kullanabiliriz.
Aşağıdaki kod, Satış sütununu artan düzende sıralayacaktır.
12345678910111213141516171819 | Alt SimpleSortOnTheTable()Aralık("Tablo1[[#Başlıklar],[Satış]]").SeçinActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort.SortFields.ClearActiveWorkbook.Worksheets("Sayfa1").ListObjects("Table1").Sort.SortFields.Add _Key:=Range("Table1[[#All],[Satış]]"), SortOn:=xlSortOnValues, Order:= _xlArtan, DataOption:=xlSortNormalActiveWorkbook.Worksheets("Sheet1") ile.ListObjects("Table1").Sort.Başlık = xlEvet.MatchCase = Yanlış.Oryantasyon = xlTopToBottom.SortMethod = xlPinYin.Uygulamakİle bitmekAlt Bitiş |
Sonuç:
Bir Tabloyu VBA ile Filtreleyin
Ayrıca VBA kullanarak bir Excel tablosunu filtreleyebilirsiniz. Tablo1 adında bir tablomuz var ve tabloyu yalnızca 1500'den büyük satışların gösterileceği şekilde filtrelemek istiyoruz.
Beş adet isteğe bağlı parametresi olan Autofilter yöntemini kullanabiliriz. İkinci sütun olan Satış sütununu filtrelemek istediğimiz için Alan'ı 2 olarak belirledik ve tarih ve sayılar için kullanılan xlAnd operatör parametresini kullanıyoruz.
123456 | Alt SimpleFilter()ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=2, Criteria1:= _">1500", Operatör:=xlAndAlt Bitiş |
Sonuç:
VBA'da ShowAllData Yöntemiyle Filtreyi Temizleyin
Filtreyi temizlemek için Worksheet sınıfının ShowAllData Yöntemine erişebilirsiniz. Temizlemek istediğiniz bir tablonun filtre(ler)iyse, önce tabloda VBA'da yapabileceğiniz bir hücre seçmeniz gerekir.
Çalışma sayfasında bir filtre uygulanıp uygulanmadığını kontrol etmek için koşullu mantık kullanılmıyorsa ShowAllData yöntemi bir hata üretecektir. Aşağıdaki kod, bunu nasıl yapacağınızı gösterir:
123456789 | Alt ClearingTheFilter()Aralık("Tablo1[[#Başlıklar],[Satış]]").SeçIf ActiveWorkbook.Worksheets("Sheet1").FilterMode = True O zamanActiveSheet.ShowAllDataBitirAlt Bitiş |
Bir Excel Tablosundan Tüm Filtreleri Temizle
Önce tabloda bir hücre seçmek zorunda kalmadan ListObject sınıfının ShowAllData Yöntemine erişebilirsiniz. Aşağıdaki kod, bunu nasıl yapacağınızı gösterir:
123 | Alt ClearAllTableFilters()ActiveWorkbook.Worksheets("Sayfa1").ListObjects("Table1").AutoFilter.ShowAllDataAlt Bitiş |
VBA ile Satır Silme
ListRows.Delete yöntemini kullanarak tablonuzun veri gövdesindeki bir satırı silebilirsiniz. Satır numarasını kullanarak hangi satırı belirtmeniz gerekir. Table1 adında aşağıdaki tablomuz var.
Diyelim ki tablonuzun veri gövdesindeki ikinci satırı silmek istediniz, aşağıdaki kod bunu yapmanıza izin verecektir:
12345 | Alt SilARow()ActiveWorkbook.Worksheets("Sayfa1").ListObjects("Tablo1").ListRows(2).DeleteAlt Bitiş |
Sonuç:
VBA ile Sütun Silme
ListColumns.Delete yöntemini kullanarak tablonuzdan bir sütun silebilirsiniz. Aşağıda gösterilen Table1 adlı aşağıdaki tabloya sahibiz:
İlk sütunu silmek için aşağıdaki kodu kullanırsınız:
12345 | Alt SilAC Sütunu()ActiveWorkbook.Worksheets("Sayfa1").ListObjects("Tablo1").ListColumns(1).DeleteAlt Bitiş |
Sonuç:
VBA'da Tabloyu Aralığa Dönüştürme
VBA kullanarak bir tabloyu normal aralığa dönüştürebilirsiniz. Aşağıdaki kod, Table1 adlı bir tabloyu bir aralığa nasıl dönüştüreceğinizi gösterir:
12345 | Alt DönüştürmeATableBackToANormalRange()ActiveWorkbook.Sheets("Sayfa1").ListObjects("Table1").UnlistAlt Bitiş |
VBA kullanarak bir Çalışma Sayfasındaki tüm Tablolara Bantlı Sütunlar Ekleme ve biçimlendirme
ListObjects koleksiyonunu kullanarak çalışma sayfanızdaki tüm tablolara erişebilirsiniz. Aşağıdaki sayfada iki tablomuz var ve VBA kullanarak her iki tabloya aynı anda bir Bantlı Sütun eklemek ve her iki tablonun veri bölümünün yazı tipini kalın olarak değiştirmek istiyoruz.
12345678910111213 | Alt EklemeBandedColumns()Dim tbl As ListObjectÇalışma Sayfası Olarak Dim shtSet sht = ThisWorkbook.ActiveSheetHer tbl için sht.ListObjectstbl.ShowTableStyleColumnStripes = Doğrutbl.DataBodyRange.Font.Bold = DoğruSonraki tblAlt Bitiş |
Sonuç:
DoCmd.RunSQL Kullanarak VBA'da Access'te Tablo Oluşturma
VBA'da Access'te tablo oluşturmanın ana yollarından biri, SQL deyimiyle bir eylem sorgusu çalıştırmak için DoCmd.RunSQL yöntemini kullanmaktır.
Örnek formumuzda bir buton var ve butona tıkladığımızda ProductsTable adında iki alanlı veya sütunlu bir tablo oluşturmak istiyoruz, biri ProductsID adlı birincil anahtar alanı, diğeri ise Sales adlı bir alan olacaktı.
Bu tabloyu oluşturmak için aşağıdaki kodu kullanırız:
123456 | Özel Alt cmdCreateProductsTable_Click()DoCmd.RunSQL "CREATE TABLE ProductsTable" _& "(ProductID INTEGER PRIMARY KEY, Sales Integer);"Alt Bitiş |
Sonuç:
VBA Kullanarak Access'te Bir Tabloyu Filtreleme
DoCmd.ApplyFilter yöntemini kullanarak Access'te bir tabloya da filtre uygulayabilirsiniz. Access'te ProductsTable adında aşağıda gösterilen basit tablomuz var.
Formumuzda bu düğmeye basmak ve ardından yalnızca 1500'den büyük Satışları görmek istiyoruz.
Yani, bunu yapmak için aşağıdaki kodu kullanırdık:
1234567 | Özel Alt cmdFilter_Click()DoCmd.OpenTable "Ürünler Tablosu"DoCmd.ApplyFilter , "[Satış]>1500"Alt Bitiş |
Sonuç: