How to open a table window


This sample shows how to open a the table window for the selected layer or standalone table in the table of contents in ArcMap. It provides the same functionality as the Open Attribute Table command on the layer context menu or the open command on the standalone table context menu.
A UIButtonControl is used so the command will only be enabled when a layer or standalonetable is selected in the table of contents.

How to use

  1. Add a new UIButtonControl to any toolbar.
  2. Right-click on the command and select view source, then paste the code below here.
  3. Make sure the names of the controls match, the sample assumes the command is called UIButtonControl1.
  4. Completely close VBA so that events on the UIButtonControl fire correctly.
  5. Select a layer or standalone table in the table of contents and click the command.
  6. The table window for the selected layer or standalone table appears.
[VBA]
Private Sub UIButtonControl1_Click()
    Dim pMxDoc As IMxDocument
    Dim pUnknown As IUnknown
    Dim pLayer As ILayer
    Dim pStandaloneTable As IStandaloneTable
    Dim pTableWindow2 As ITableWindow2
    Dim pExistingTableWindow As ITableWindow
    Dim SetProperties As Boolean
    
    'Get the selected item from the current contents view
    Set pMxDoc = ThisDocument
    Set pTableWindow2 = New TableWindow
    Set pUnknown = pMxDoc.SelectedItem
    
    ' Determine the selected item's type
    ' Exit sub if item is not a feature layer or standalone table
    If TypeOf pUnknown Is IFeatureLayer Then 'A FeatureLayer
        Set pLayer = pUnknown
        Set pExistingTableWindow = _
                                   pTableWindow2.FindViaLayer(pLayer)
        ' Check if a table already exists; if not create one
        If pExistingTableWindow Is Nothing Then
            Set pTableWindow2.Layer = pLayer
            SetProperties = True
        End If
    ElseIf TypeOf pUnknown Is IStandaloneTable Then
        ' A standalone table
        Set pStandaloneTable = pUnknown
        Set pExistingTableWindow = _
                                   pTableWindow2.FindViaStandaloneTable(pStandaloneTable)
        ' Check if a table already exists; if not, create one
        If pExistingTableWindow Is Nothing Then
            Set pTableWindow2.StandaloneTable = pStandaloneTable
            SetProperties = True
        End If
    End If
    
    If SetProperties Then
        pTableWindow2.TableSelectionAction = esriSelectFeatures
        pTableWindow2.ShowSelected = False
        pTableWindow2.ShowAliasNamesInColumnHeadings = True
        Set pTableWindow2.Application = Application
    Else
        Set pTableWindow2 = pExistingTableWindow
    End If
    
    ' Ensure Table Is Visible
    If Not pTableWindow2.IsVisible Then pTableWindow2.Show True
    
End Sub

Private Function UIButtonControl1_Enabled() As Boolean
    
    Dim pDoc As IMxDocument
    Dim pMap As IMap
    Dim bolEnabled As Boolean
    Set pDoc = ThisDocument
    Set pMap = pDoc.FocusMap
    bolEnabled = True
    
    Dim pSelItem As IUnknown
    Set pSelItem = pDoc.SelectedItem
    ' Disable if the selected item is nothing or if
    ' it is not a layer or table
    If pSelItem Is Nothing Then
        bolEnabled = False
    ElseIf Not (TypeOf pSelItem Is ILayer Or TypeOf pSelItem Is IStandaloneTable) Then
        bolEnabled = False
    End If
    
    UIButtonControl1_Enabled = bolEnabled
    
End Function