Skip to content

Table

Syntax

    Dim tbl As ListObject
    Set tbl = ThisWorkbook.ActiveSheet.ListObjects("Table13")
    'First row , First column
    'tbl.Range.Cells(1, 1)
    'First row , First column above 1 row
    'tbl.Range.Cells(1, 1).Offset(-1,0)

Get Active table

Private Function GetActiveTable()
    On Error GoTo ERRORHANDLER
    Set GetActiveTable = ActiveCell.ListObject

ERRORHANDLER:
    If GetActiveTable Is Nothing Then
        ErrorMessage = "No Table Selected"
    End If

End Function

Get Table Using only Name

Private Function GetTableObject(tableName As String) As Excel.ListObject
    On Error Resume Next
    Set GetTableObject = Application.range(tableName).ListObject
    On Error GoTo 0
    If GetTableObject Is Nothing Then
        Call Err.Raise(1004, ThisWorkbook.Name, "Table '" & tableName & "' not found!")
    End If
End Function
Public Function GetListObject(ByVal ListObjectName As String, Optional ParentWorksheet As Worksheet = Nothing) As Excel.ListObject
    On Error Resume Next

    If (Not ParentWorksheet Is Nothing) Then
        Set GetListObject = ParentWorksheet.ListObjects(ListObjectName)
    Else
        Set GetListObject = Application.range(ListObjectName).ListObject
    End If

    On Error GoTo 0                              'Or your error handler

    If (Not GetListObject Is Nothing) Then
        'Success
    ElseIf (Not ParentWorksheet Is Nothing) Then
        Call Err.Raise(1004, ThisWorkbook.Name, "ListObject '" & ListObjectName & "' not found on sheet '" & ParentWorksheet.Name & "'!")
    Else
        Call Err.Raise(1004, ThisWorkbook.Name, "ListObject '" & ListObjectName & "' not found!")
    End If

End Function

Clear Table

 Private Sub ClearTableData(tbl As ListObject)
    'Delete all table rows except first row
    With tbl.DataBodyRange
        If .Rows.Count > 1 Then
            .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
        End If
    End With

    'Clear First Row
    tbl.range.Rows(2).Clear
End Sub

Clear Table but keep formula's

Private Sub ClearTableData(tbl As ListObject)
    'Delete all table rows except first row
    If Not tbl.Range.Cells(2, 1).HasFormula Then
        If tbl.Range.Cells(2, 1) = "" Then
            tbl.Range.Cells(2, 1) = 1
        End If
    End If
    With tbl.DataBodyRange
        If Not tbl.DataBodyRange Is Nothing Then
            If .Rows.Count > 1 Then
                .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Rows.Delete
            End If
        End If
    End With

    'Clear First Row but keep formula's
    Dim j As Integer
    For j = 1 To tbl.Range.Rows(2).Columns.Count
        If Not tbl.Range.Cells(2, j).HasFormula Then
            tbl.Range.Cells(2, j).Clear
        End If
    Next

End Sub

Loop Through Table

 Dim tbl As ListObject
    Set tbl = AudioListSheet.ListObjects("AudioCategoryTable")

    Dim i As Integer
    For i = 1 To tbl.DataBodyRange.Rows.Count
        CategoryListBox.AddItem tbl.DataBodyRange.Cells(i, 1)
    Next

Get Last Used Row

Private Function GetLastUsedRow(tbl As ListObject) As Integer
    GetLastUsedRow = 2
    If tbl.Range.Cells(GetLastUsedRow, 1).value <> "" Then
        GetLastUsedRow = tbl.Range.Rows.Count + 1
    End If
End Function

Sort Table

Sub Sort()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim rng As Range

    Set ws = ActiveSheet
    Set tbl = ws.ListObjects("myTable")
    Set rng = Range("myTable[Numbers]")

    With tbl.Sort
       .SortFields.Clear
       .SortFields.Add Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending
       .Header = xlYes
       .Apply
    End With
End Sub
Sort Multiple Column
Sub Sort()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim rng As Range

    Set ws = ActiveSheet
    Set tbl = ws.ListObjects("myTable")
    Set rng1 = Range("myTable[First Name]")
    Set rng2 = Range("myTable[Last Name]")

    With tbl.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rng1, Order:=xlAscending
        .SortFields.Add Key:=rng2, Order:=xlAscending
        .Header = xlYes
        .Apply
    End With
End Sub