Splash formulier.
Een pop-up formulier frmSplash die na een aantal seconden wordt afgesloten.
Er wordt ook een knop cmdAfsluiten voorzien die het mogelijk maakt om het formulier sneller te sluiten.
'Knop om formulier sneller af te sluiten Private Sub cmdSluiten_Click() Unload frmSplash End Sub ''Voorzie volgende code vb in Activate_event van Worksheet of Workbook Private Sub Worksheet_Activate() frmSplash.Show End Sub Voorzie volgende in het Activate_event van het formulier Private Sub UserForm_Activate() Dim lngSeconden As Long Me.Repaint 'Zodoende worden labels en andere zichtbaar. lngSeconden = Timer() Do DoEvents 'hierdoor kan code cmdSluiten_Click worden uitgevoerd Loop Until (Timer() - lngSeconden) > 7 ''formulier sluit na 7 seconden Unload Me End SubTop
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 SubTop
Combobox koppelen aan Array
Me.cboGeslacht.List = Array("Vrouw", "Man")Top
Combobox Items toevoegen met AddItem methode
Volgende code voegt de namen toe aan een Combobox of ListBox
Dim wkb As Excel.Workbook Dim sht As Excel.Worksheet Dim strInfo As String Set wkb = ActiveWorkbook For Each sht In wkb.Worksheets Me.lboSheet.AddItem sht.Name Next Me.lboSheet.Selected(0) = TrueTop
Combobox koppelen aan benoemde Range
Volgende code voegt Items van Range toe aan een Combobox of Listbox
Dim rng As Excel.Range Dim wrk As Workbook Dim wsh As Worksheet Set wrk = Application.ActiveWorkbook Set wsh = wrk.Worksheets("NaamForm") wsh.Activate Set rng = Range(wsh.Names("SchaalEenTien")) Me.cboSchaal.RowSource = rng.AddressTop
Combobox koppelen aan Tabel of ListObject
Bij volgende code worden de Items geladen door de RowSource property te koppelen aan het adres van het ListObject. Het listobject mag meerdere kolommen hebben zolang men in de instellingen van de Combobox hetzelfde aantal kolommen instelt.
Dim shtData As Worksheet Dim lsoTijdstip As ListObject Set shtData = ThisWorkbook.Worksheets("Data") Set lsoTijdstip = shtData.ListObjects("tblTijdstip") Me.lboTijdStip.RowSource = lsoTijdstip.DataBodyRange.AddressTop
Combobox koppelen aan Tabel of ListObject
Bij volgende code worden de Items geladen door de RowSource property te koppelen aan het adres van het ListObject. Het listobject mag meerdere kolommen hebben zolang men in de instellingen van de Combobox hetzelfde aantal kolommen instelt.
Dim shtData As Worksheet Dim lsoTijdstip As ListObject Set shtData = ThisWorkbook.Worksheets("Data") Set lsoTijdstip = shtData.ListObjects("tblTijdstip") Me.lboTijdStip.RowSource = lsoTijdstip.DataBodyRange.AddressTop
Lijstgegevens van een Listbox afhankelijk keuze Combobox.
Stel twee tabellen tblCategorie en tblSubCategorie.
![]() |
|
tblCategorie | tblSubCategorie |
Vervolgens een formulier frmCat met een Combobox cboCategorie en een Listbox lsbSubCat. Bedoeling is dat als in cboCategorie een keuze wordt gemaakt dat in lstSubCat enkel deze SubCategorie getoond wordt met een IDCategorie gelijk aan deze van de de ComboBox.
![]() |
Het principe bestaat er uit dat wij gedelimiteerde string vormen die via de VBA Split functie in een Array wordt omgezet. Bij het uitlezen van de Array wordt de AddItem methode toegepast en de Waarde van de tweede kolom toegekend.
'functie voor het vormen van de categorie-string Public Function fCategorie() As String Dim wshCategorie As Worksheet Dim lsoCategorie As ListObject Dim intRijen As Integer Dim intKolommen As Integer Dim intTelR As Integer Dim intTelK As Integer Dim strTemp As String Dim strKol2 As String Set wshCategorie = ThisWorkbook.Worksheets("categorie") Set lsoCategorie = wshCategorie.ListObjects("tblCategorie") intRijen = lsoCategorie.DataBodyRange.Rows.Count intKolommen = lsoCategorie.DataBodyRange.Columns.Count For intTelR = 1 To intRijen strTemp = strTemp & lsoCategorie.DataBodyRange.Cells(intTelR, 1) & "," Next intTelR For intTelR = 1 To intRijen strKol2 = strKol2 & lsoCategorie.DataBodyRange.Cells(intTelR, 2) & "," Next intTelR strTemp = Left(strTemp, Len(strTemp) - 1) strKol2 = Left(strKol2, Len(strKol2) - 1) fCategorie = strTemp & "|" & strKol2 End Function 'functie voor het vormen van de subcategorie-string Public Function fFilterOpCategorie(intCat As Integer) As String Dim wshSubCategorie As Worksheet Dim lsoSubCategorie As ListObject Dim strKolIDSub As String Dim strKolSub As String Dim intRijen As Integer Dim intTel As Integer Set wshSubCategorie = ThisWorkbook.Worksheets("subcategorie") Set lsoSubCategorie = wshSubCategorie.ListObjects("tblSubCategorie") intRijen = lsoSubCategorie.DataBodyRange.Rows.Count For intTel = 1 To intRijen 'Debug.Print lsoSubCategorie.DataBodyRange.Cells(intTel, 1) If Int(lsoSubCategorie.DataBodyRange.Cells(intTel, 0).Value) = intCat Then strKolIDSub = strKolIDSub & lsoSubCategorie.DataBodyRange.Cells(intTel, 1) & "," strKolSub = strKolSub & lsoSubCategorie.DataBodyRange.Cells(intTel, 2) & "," End If Next If Len(strKolIDSub) <> 0 Then strKolIDSub = Left(strKolIDSub, Len(strKolIDSub) - 1) strKolSub = Left(strKolSub, Len(strKolSub) - 1) fFilterOpCategorie = strKolIDSub & "|" & strKolSub Else fFilterOpCategorie = "" End If End Function 'In de Activate-event van het formulier wordt de categorie string in de ComboBox cbocategorie ingelezen Private Sub UserForm_Activate() Dim intTel As Integer Dim aTotaal() As String Dim aKol1() As String Dim aKol2() As String aTotaal = Split(fCategorie, "|") aKol1 = Split(aTotaal(0), ",") aKol2 = Split(aTotaal(1), ",") For intTel = 0 To 4 Me.cboCategorie.AddItem aKol1(intTel) Me.cboCategorie.Column(1, intTel) = aKol2(intTel) Next Me.cboCategorie.DropDown End Sub 'In de Change-event van cboCategorie wordt de string van de subCategorie 'in de Listbox lsbsubCat ingelezen Private Sub cboCategorie_Change() Dim aTotaal() As String Dim aKol1() As String Dim aKol2() As String Dim intIDCat As Integer Dim intTel As Integer Me.lsbSubCat.Clear If Len(Me.cboCategorie.Value) > 0 Then intIDCat = CInt(Me.cboCategorie.Value) If Len(fFilterOpCategorie(intIDCat)) <> 0 Then aTotaal = Split(fFilterOpCategorie(intIDCat), "|") aKol1 = Split(aTotaal(0), ",") aKol2 = Split(aTotaal(1), ",") For intTel = 0 To UBound(aKol1) Me.lsbSubCat.AddItem aKol1(intTel) Me.lsbSubCat.Column(1, intTel) = aKol2(intTel) Next intTel End If End If Me.Repaint End SubTop
hallo