@Veerj,
Ik heb nog een vraagje ivm het eventueel inkorten/versnellen van meerdere (repetitieve) codeblokken (uit het verleden weet ik dat jij daar nogal een ‘krak’ in bent
).
In totaal heb ik 12 ComboBoxen waarvan er 5 gelinkt zijn aan tabel ‘naam’ en 6 gelinkt aan tabel ‘voornaam’. Enkel de eerste ComboBox is gelinkt aan tabel ‘plaats’.
Mijn vraag slaagt dus op de code voor de meerdere ComboBoxen die gelinkt zijn aan de tabellen ‘naam’ en ‘voornaam’.
Zou het eventueel mogelijk zijn om ipv de code voor elke ComboBox afzonderlijk te coderen, te werken met bvb arrays en lussen om de code in te korten en/of te versnellen?
Dus bvb iets in de trant van :
(voor de ComboBoxen gelinkt aan de tabel ‘naam’)
arr_nm = Array(ComboBox2, ComboBox3, ComboBox6, ComboBox8, ComboBox11)
For Each CB in arr_nm
‘hier de betreffende code
Next
en
(voor de ComboBoxen gelinkt aan de tabel ‘voornaam’)
arr_vrnm = Array(ComboBox4, ComboBox5, ComboBox7, ComboBox9, ComboBox10, ComboBox12)
For Each CB in arr_vrnm
‘hier de betreffende code
Next
En kan dit dan voor elke soort codeblok die ik moet toepassen mbt ComboBoxen?
Ik heb momenteel volgende soorten codeblokken (ik vervang het nr van de ComboBox even door ‘#’ en de betreffende specifieke tabelnamen door gewoon ‘tabelnaam’) :
(achter blad ‘INPUT’) :
Private Sub ComboBox#_Change()
With ComboBox#
If Len(.Value) > 0 Then
.List = Filter(Application.Transpose(Sheets("inhoud keuzelijsten").Range("tabelnaam")), .Value, 1, vbTextCompare)
.DropDown
End If
End With
End Sub
Private Sub ComboBox#_DropButtonClick()
ComboBox#.List = Filter(Application.Transpose(Sheets("inhoud keuzelijsten").Range("tabelnaam")), ComboBox#.Value, 1, vbTextCompare)
End Sub
Met bovenstaande code zou ik dus in totaal 24 Sub’s hebben…
(achter de opdrachtknop (module)) :
With Sheets("inhoud keuzelijsten").ListObjects("tabelnaam")
If Not IsNumeric(Application.Match(Sheets("INPUT").ComboBox#.Text, .DataBodyRange, 0)) Then
.ListRows.Add.Range = Sheets("INPUT").ComboBox#.Text
.Range.Sort .DataBodyRange(1, 1), 1, , , , , , 1
End If
End With
met bovenstaande code zou ik dan in totaal 36 extra codeblokken hebben (12 per soort akte (geb / huw / ovl) die verwerkt moet worden).
Aangezien de tabellen uiteindelijk enkele tientallen rijen zullen bevatten vrees ik dat de gehele code op deze wijze gigantisch traag zal worden naarmate die tabellen langer zullen worden.
(Indien mijn vraag mogelijk zou zijn zou ik dan de Sub’s kunnen reduceren van 24 naar 6 en de codeblokken achter de opdrachtknop kunnen reduceren van 36 naar 9.)(aan het einde van de code achter de opdrachtknop (module) binnen de ‘With Sheets(“INPUT”), van elke soort akte die verwerkt moet worden, heb ik dan) :
For Each cb In Sheets("INPUT").OLEObjects
If cb.progID = "Forms.ComboBox.1" Then cb.Object.ListIndex = -1
Next
Zou mijn vraag mogelijk zijn?
Ik vermoed wel dat het voor de codeblokken achter het werkblad ‘INPUT’ een uitdaging zal worden gezien de soort Sub die hier noodzakelijk is en misschien zelfs onmogelijk zal zijn.
Maar voor de codeblokken achter de opdrachtknop (module) denk ik wel dat het mogelijk moet zijn, of zie ik het verkeerd? Gezien mijn beperkte kennis van VBA tast ik hier wat in het duister.
groetjes,
BlackDevil