MS Excel - ListObject.

Navigeren doorheen tabel gegevens met ListObject

Som kan het handig zijn om tabelgegevens via een formulier te bekijken. Ook gegevens invoeren kan voordelen hebben naar integriteit van de data.
Hier maken wij gebruik van twee eenvoudige tabel namelijkl tblAgent, deze tabel heeft twee velden:

  1. Naam
  2. Regio

en de tabel tblRegio met een veld:

  1. Regio

Wij ontwerpen een Userform frmAgent met de volgende controle-elementen en instellingen:

Bij het activeren van het formulier voorzien wij code die de volgende acties verwezenlijkt:

Daartoe voorzien wij volgende code in het Activate event van het formulier.

             Private Sub UserForm_Activate()
                 Dim wshData As Worksheet
                 Dim lsoAgent As ListObject
                 Dim lsoRegio As ListObject
             
                 Set wshData = ThisWorkbook.Worksheets("Data")
                 Set lsoAgent = wshData.ListObjects("tblAgent")
                 Set lsoRegio = wshData.ListObjects("tblRegio")
             
                 Me.cboRegio.RowSource = lsoRegio.DataBodyRange.Address
                 Me.lblRechts.Caption = lsoAgent.DataBodyRange.Rows.Count
                 Me.lblLinks.Caption = 1
             
                 Me.txtAgent.Value = lsoAgent.DataBodyRange.Cells(1, 1).Value
                 Me.cboRegio.Value = lsoAgent.DataBodyRange.Cells(1, 2).Value
             End Sub
             

In de module van het formulier voorzien wij een algemene routine die de waarden van txtAgent en cboRegio zet op basis van de rij in de tabel tblAgent.

             Public Sub sNavigeer(intRij As Integer)
                 Dim wshData As Worksheet
                 Dim lsoAgent As ListObject
                 Dim lsoRegio As ListObject
             
                 Set wshData = ThisWorkbook.Worksheets("Data")
                 Set lsoAgent = wshData.ListObjects("tblAgent")
                 Set lsoRegio = wshData.ListObjects("tblRegio")
             
                 Me.txtAgent.Value = lsoAgent.DataBodyRange.Cells(intRij, 1).Value
                 Me.cboRegio.Value = lsoAgent.DataBodyRange.Cells(intRij, 2).Value
             End Sub
             

Tenslotte roepen wij bovenstaande routine aan in de SpinDown en SpinUp procedures van spbNavigeer.

             Private Sub spbNavigeer_SpinDown()
             Dim intRij As Integer
             If CInt(Me.lblLinks.Caption) > 1 Then
                 Me.lblLinks.Caption = CInt(Me.lblLinks.Caption) - 1
                 intRij = CInt(Me.lblLinks.Caption)
                 sNavigeer (intRij)
                 Me.Repaint
             End If
             End Sub
             
             Private Sub spbNavigeer_SpinUp()
             Dim intRij As Integer
             If CInt(Me.lblLinks.Caption) < CInt(Me.lblRechts.Caption) Then
                 Me.lblLinks.Caption = CInt(Me.lblLinks.Caption) + 1
                 intRij = CInt(Me.lblLinks.Caption)
                 sNavigeer (intRij)
                 Me.Repaint
             End If
             End Sub
             

In de commandbutton cmdBewaar voorzien wij code om wijzingen te bewaren.

             Private Sub cmdBewaar_Click()
             Dim intRij As Integer
             Dim wshData As Worksheet
             Dim lsoAgent As ListObject
             
             Set wshData = ThisWorkbook.Worksheets("Data")
             Set lsoAgent = wshData.ListObjects("tblAgent")
             
             intRij = CInt(Me.lblLinks.Caption)
             lsoAgent.DataBodyRange.Cells(intRij, 1).Value = Me.txtAgent.Value
             ThisWorkbook.Save
             End Sub      

        

hallo