Userform: Volgorde van aanvinken Checkboxen onthouden

Status
Niet open voor verdere reacties.

Piet Bom

Verenigingslid
Lid geworden
13 nov 2010
Berichten
786
Hierbij eerst een algemene vraag over VBA en Userforms, voor dat ik een voorbeeld ga maken.
Ik wil de kolomtitels van een willekeurige tabel in een Userform ophalen en dan dmv Checkboxen een aantal titels aanvinken, maar tijdens het aanvinken moet er een aantal geteld worden en de volgorde onthouden. Dus de uitkomst van de Userform moet dan zijn: 4 kolommen geselecteerd in volgorde: 16, 7, 19 en 3 (zijnde de kolomnummers v.l.n.r.)
Een tabel kan in dit geval maximaal 40 kolommen bevatten en er moet dus tussen 1 en 40 kolommen geselecteerd kunnen worden en de volgorde is belangrijk.
Hoe je de Userform kunt vullen heb ik al een idee om dat via een For-Next Loop te doen. Maar het aanvinken moet de teller activeren en dat kan m.i. alleen als je achter iedere CheckBox een subroutine hangen en dat zijn er nu 40, maar wat als het er honderd moeten worden.
De hamvraag is dus eigenlijk: Kan je door een willekeurige action (klik of input) 1 subroutine laten activeren die dan telt en de volgorde bijhoudt ?
 
Met een Klassen module heb je maar een routine nodig.

Wat je bedoelt met onthouden weet ik niet, maar je kan het altijd wegschrijven naar een blad.
Geen idee wanneer je het weer terug wilt halen.

Misschien kun je een bestand plaatsen, het is me nu te vaag.
 
nog een suggestie:
Waarom gebruik je geen Listbox? (met aanvinkmogelijkheid)
Liststyle ==> Option
Multiselect ==> Multi

Kun je de Listbox in 1 keer vullen en met het Change-event van de Listbox de volgorde vastleggen
(en eventueel bij uitvinken weer uit de volgorde halen)
 
Bedankt voor jullie reacties.
@Harry,
Ik heb nog nooit naar Class Modules gekeken.
Dus daar zit een leermomentje aan te komen :)
@Eric,
Jouw tips gaan al aardig in de richting, waar ik naar toe wil.
Ik wist wel iets van ListBox-en, maar niet dat je die ook Multi Selectable kan maken.
Kun je zo'n ListBox in een Userform toepassen met zo'n Change-event?
Dat wordt een 2de leermoment.

Ik ga een voorbeeldje in elkaar hacken :)
En kom er op terug.
 
Dag Piet,

Hierbij een voorbeeldje/aanzetje met een Listbox
 

Bijlagen

  • Pietvb.xlsb
    19,8 KB · Weergaven: 54
Perfect Eric,
Bedankt.
Die kant wil ik op.
Ik moet vandaag en morgen werken, dus vrijdag zal ik mijn voorbeeldbestand posten.
 
@Ev R

In jouw voorbeeld:

Code:
Private Sub UserForm_Initialize()
    Caption = ""
    ListBox1.Column = Sheet1.ListObjects(1).Range.Value
End Sub

Private Sub ListBox1_Change()
   If ListBox1.Selected(ListBox1.ListIndex) Then Caption = Caption & "|" & ListBox1.ListIndex + 1
End Sub
 
@snb

Yep, Column is een stuk makkelijker :thumb:
De Change is mi te kort door de bocht, tenminste als het "unselect-en" de gekozen kolom weer uit de 'caption' moet halen.
 
Maar met het 'un' selecten gaat überhaupt de volgorde teloor.
 
Wat een Super Team van VBA-helpers !
De hulp gaat sneller dan ik kan verwerken :)
@snb,
Ik zou de volgende procedure kunnen toepassen:
Je vinkt een paar items Aan.
Als je daarna 1 van die vinkjes Uit vinkt, vervalt die keuze en alle later aangevinkte items schuift 1 plaats op.
Als dat helpt ga je verder tot de Ok, Done knop wordt geklikt.
Zo niet, dan klik je op Cancel en begin opnieuw.
Maar ik ga eerst een voorbeeldje maken en dan kan ik gaan testen.
 
@E v R

Of deze:

Code:
Private Sub UserForm_Initialize()
  ListBox1.Column = Sheet1.ListObjects(1).HeaderRowRange.Value
End Sub
 
In mijn test programma had ik een range gedefinieerd als input voor de Listbox
en die werkte uiteindelijk met:
Code:
reeks = Selection.Value
Private Sub UserForm_Initialize()
  ListBox1.Column = reeks.Rows(1).Value
End Sub
Ik ben al een heel stuk op weg met mijn voorbeeldbestand.
Morgen hoop ik hem te kunnen plaatsen.
 
Hier dan mijn voorbeeldbestand.
Het was een oude code van toen de draaitabellen nog niet zo populair waren (heel lang geleden)
Ik zag laatst dat er een nieuwe functie in Excel 365 en Excel 2019 zou komen: Unique()
Nieuwsgierig als ik ben, op zoek gegaan in mijn Excel 2019, maar kon niets vinden.
Nog even ge-google-d, toen ik er achter kwam dat die functie alleen voor Insiders beschikbaar was.
Na wat gemopper, waarom ik geen Insider ben :( dacht ik, zo'n functie had ik 20 jaar geleden al.
Zelf gemaakt, maar niet erg gebruiksvriendelijk.
Toen kwam ik op het idee om Userform te gebruiken, maar liep tegen mijn eerste vraag aan.
Het idee van E v R om een MultiSelectable ListBox te gebruiken, gaf de doorbraak tot een een leuke tool.
Hij doet precies wat ik wou.
Nu geef ik toe dat ik niet de meest compacte code kan schrijven, maar het werkt best aardig voor mij :)
Ik heb de VBA code en de Userform in mijn Personal.xlsb gehangen, zodat ik een willekeurig Excelbestand met een tabel, zonder aanpassing kan analyseren op Unieke combinaties.
Een icoontje in de Quick Access bar gestopt en klaar is Kees.
De vraag die overblijft: Kan de code korter, of zal ik PowerPivot gebruiken of kan ik beter wachten op die Unique-function ?
 

Bijlagen

  • Make_Quick_Summary2.xlsb
    37,8 KB · Weergaven: 46
Code kan 'altijd' korter, maar als het voor je werkt dan werkt het toch?:thumb:
Overigens kun je door een draaitabel te gebruiken (met Data to the Data model aanvinken) hetzelfde bewerkstelligen, maar wellicht werkt dit tooltje voor jou handiger over meerdere bestanden heen.
Hetgeen ik niet snap is waarom de volgorde van de kolommen van belang is, wellicht om in de gewenste output te zetten maar qua unieke aantallen maakt dit toch niks uit?
 
Een draatabel lijkt me inderdaad niet verkeerd: zie de resultatenpagina.
Ook daarin is de volgorde van de velden vast te leggen.
De sorteringsmogelijkheden zijn een verder voordeel.
 

Bijlagen

  • __Make_Quick_Summary_003.xlsb
    35,8 KB · Weergaven: 44
Laatst bewerkt:
Bedankt voor jullie reacties,
@E v R,
De volgorde van aanvinken bepaald de kolomvolgorde van de key-fields in de outputtabel v.l.n.r.
En zo wordt de output tabel ook gesorteerd, dus bijv. Provincie, Plaats, Postcode
De tip van Data to Datamodel heb ik uitgeprobeerd met Distinct Count, maar dat kan maar op 1 kolom. En ik wil de unieke combinatie van de X keyfields.
Dat kan dan weer wel d.m.v. een calculated field toe te voegen: concatenate X keyfields en daar de Distinct Count op loslaten. Maar dat is nogal bewerkelijk.

@snb,
Volgens mij gaat het fout bij een gewone draaitabel. Die sommeert de aantal keren dat een combinatie voorkomt in de brontabel. Als hij niet zou sommeren, maar gewoon het aantal getallen zou tellen, dan zou de output goed zijn, maar dat is niet instelbaar bij een draaitabel.

Affijn mijn vraag is beantwoord en ik kan er mee verder, bedankt.
 
Yes, ik zie het, Distinct Count is inderdaad op 1 kolom, dan zou je bij gebruik van een (gewone) draaitabel vervolgens de rijen moeten tellen om tot een uniek aantal te komen. (of PowerPivot gebruiken ;) )
anyway, niks mis met jouw tooltje :thumb:
 
Het werkt perfect.
Heb het al een paar keer gebruikt en ga het zeker nog gebruiken.
Bedankt voor jullie hulp.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan