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:
en de tabel tblRegio met een veld:
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