listview en comboboxen voor een overzicht werkt niet naar behoren.

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Experts,

Allereerst een gezond 2021

Ben bezig met een project waarbij een overzicht gemaakt moet worden
dat getoond wordt in een listview.
Heb 6 comboboxen met items waarmee men verschillende combinaties moet kunnen maken.
Na diverse keren aanpassen, lukt het mij niet om de juiste waarde eruit te krijgen.
Als ik één van de waardes verander, krijg ik andere waardes terug.
Mogelijk dat één van jullie mij wil helpen.
mvg
 

Bijlagen

  • Testoverzicht.xlsm
    107,1 KB · Weergaven: 20
Ola @Willem

Dat kan een stuk simpeler.
Waarom gebruik je geen gewone listbox voor het incidentenoverzicht ?
Met een logische volgorde van procedures in de codemodule is de code veel eenvoudiger te lezen.
Het gebruik van 'Call' hebbben wa al in 1998 afgezworen.
De meeste eigenschappen van een control/object leg je vast in het ontwerp.
Vermijd interaktie met een werkblad.
Gebruik geen 'Activate' in VBA.
Vermijd 'public' variabelen.

Het is 'database'-technisch beter alle records in 1 (intelligente) tabel in 1 werkblad te zetten.
Met Autofilter of Advancedfilter halen we de gewenste records er wel uit.

Code:
Private Sub UserForm_Initialize()
    For j = 1 To 4
       Me("cboOverzicht" & Choose(j, "Categorie", "Prio", "Werkgebied", "Afloop")).List = wsIncident.Columns(j + 4).SpecialCells(2).Offset(1).SpecialCells(2).Value
    Next
    cboOverzichtPrio.ListIndex = 0
    cboOverzichtJaar.Value = Year(Date)
End Sub

Code:
Private Sub cboOverzichtJaar_Change()
    wsLvwOverzicht.UsedRange.ClearContents
    With wsAfgerond.UsedRange
            .AutoFilter 7, cboOverzichtJaar
            .Copy wsLvwOverzicht.Cells(1)
            .AutoFilter
    End With
    If cboOverzichtJaar <> Year(Date) Then cboOverzichtPrio.Value = "Afgerond"

    Filter_Mijn_ZoekWaarde
End Sub

Code:
Private Sub Filter_Mijn_ZoekWaarde()
   sn = wsLvwOverzicht.Cells(1).CurrentRegion.Resize(, 12)
   txtOverzichtAantal = UBound(sn)
   
   With lvwoverzicht
     .ListItems.Clear
   
      For j = 2 To UBound(sn)
         With .ListItems.Add(, , sn(j, 1))
            For jj = 1 To 7
              .ListSubItems.Add , , sn(j, Choose(jj, 2, 3, 4, 6, 9, 10, 12))
            Next
         End With
      Next
   End With
End Sub
 
Laatst bewerkt:
@snb

Ik had werkelijk niet zo snel een antwoord verwacht.
Sorry, Het is voor mij 13 jaar geleden dat iets vba programmeerde.
De tijd heeft mij ingehaald.
Neem jou tips mee.
Was bezig om jou project met die listview door te krijgen.
Maar ga nu weer verder met mijn project
Mijn dank is wereldwijd, dat je mij ondersteund.
mvg
 
@snb

Dank je.
Gaat deze ook even doornemen.
Bovenstaande code vult m wel, alleen
als alle boxen gevuld zijn en ik kies in één of andere box een andere waarde
krijg ik bij categorie alle categorieen te zien en niet die ik gekozen had.
Kennelijk onthoud hij de waarde niet.
ik zelf heb het gevoel dat ik zgn tmpWaardes moet hebben, als er een ander item gekozen wordt.
mvg


Edit: Hij struikelt ook over lege velden.
 
Laatst bewerkt:
Kijk eerst eens even naar de techniek.
Dat er op alle keuzelijsten tegelijkertijd gefilterd moest worden had je nog nergens vermeld.
Dat is een heel andere opgave dan filteren op 1 criterium.
En laat je vooral niet leiden door gevoelens, daarvoor is VBA niet gemaakt.
 
En nu nog een beetje gesofistikeerder, zoals onze zuiderburen zeggen:
 

Bijlagen

  • __Testoverzicht_snb.xlsb
    93,6 KB · Weergaven: 21
@snb
Als ik een keuze maak in de categorie, wordt Soort niet gevuld met items die daarbij horen
Probeer de code te doorgronden, waar dat gebeurd dat vullen, maar kom er niet uit.
 
Laatst bewerkt:
Je bent niet consistent in kolomkoppen: soort delict en soort taak, categorie en taak.
Bedoel je het volgende:
Als taak 1, taak 2, taak3 of taak 4 geselecteerd wordt dient tegelijkertijd de 'subtaak' 1.1, 2.1, 3.1 resp. 4.1 zichtbaar te worden bij 'soort delict'.
 
Yep, dacht dat je dat gezien had in het bestand dat toegevoegd had.
Sorry daarvoor
mvg
Willem
 
In de laatst geplaatste versie zit dat er nog niet in, omdat ik voorrang gaf aan de gebeurtenisklasse voor de comboboxen.
In deze nieuwe bijlage wél.
NB. met een klik op de kolomnaam sorteer je alle records op-/aflopend op kolominhoud.
 

Bijlagen

  • __werkvoorraad_snb.xlsb
    96,7 KB · Weergaven: 20
Laatst bewerkt:
@snb

Geweldig dit. Ben er blij mee.

Dat bestand werkt perfect en voldoet aan alles.
Mijn dank is levensgroot.
Nu heb ik dit geïmplementeerd in mijn project.
Krijg alleen een foutmelding - subscript valt buiten bereik -
En dat gebeurt hier. Gisteravond en vanmorgen bezig geweest.
Helaas niet gelukt.

Tevens waar haal je de titels van de kolomkoppen vandaan?

Code:
Private Sub Class_Initialize()
   sn = wsData.ListObjects(1).DataBodyRange
End Sub
 
Laatst bewerkt:
- heb je mijn PM gezien ?

- moet er in het userform iets gewijzigd kunnen worden ? (bijv. de status)

- het is handiger een algemene macromodule te maken met
Code:
Public sn
- in de Userform_initialize gebeurtenis
Code:
sn = wsData.ListObjects(1).DataBodyRange
- verwijder
Code:
Private Sub Class_Initialize()
   sn = wsData.ListObjects(1).DataBodyRange
End Sub
en
Code:
 dim sn
in de klassemodule

- check of je een werkblad hebt met de codenaam 'wsdata'
- check of het werkblad 'wsdata' een 'intelligente tabel' (=.Listobject in VBA) bevat

- de kolomkoppen (titel en breedte) heb ik in de ontwerpmodus met de hand in de eigenschappen van de listview ingevoerd.
 
Geïmplementeerd:

Selecteer een record, wijzig 1 van de optionbuttons, klaar.
 

Bijlagen

  • __werkvoorraad_snb.xlsb
    93,6 KB · Weergaven: 28
Ik vind dit wel mooi.
Alleen mag men daar niets wijzigen, alleen als men op een item dubbelklikt ga je terug naar het 1e form
waar alle data gevuld worden in de tekstboxen en comboboxen.
 
Vermijd het gebruik van 2 (of meer) userforms.
Het maakt helemaal niet uit waar iets gewijzigd mag worden voor de funtionaliteit van het Userform.
 
Laatst bewerkt:
Beste snb

de info van u van kolomkoppen (titel en breedte) heb ik in de ontwerpmodus met de hand in de eigenschappen van de listview ingevoerd.

ik heb in de eigenschappen gekeken met de Ontwerp eigenschappen in de listview4 maar ik kan nergens de met de hand ingevoerde kolomkoppen (titel en breedte) vinden zou u mij hiermee kunnen helpen a.u.b

alvast bedankt groetjes Leo
 
Klik op de eigenschap 'custom', dan verschijnt een control met 7 tabbladen.
 

Bijlagen

  • Listview_kolomkop.GIF
    Listview_kolomkop.GIF
    48,1 KB · Weergaven: 49
Laatst bewerkt:
Op die regel staat bij mij Info.
Hoe maak je je sheet dan intelligent?
 

Bijlagen

  • IMG_0710.jpg
    IMG_0710.jpg
    57,7 KB · Weergaven: 25
Laatst bewerkt:
Opgepast !: klik op 'aangepast' (= 'custom')
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan