Hoe ComboBox vanzelf te laten sluiten indien niets in de lijst wordt geselecteerd

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik gebruik een combobox1 in een Excel-sheet. Dit werkt prima: als ik een item in het opengeklikte overzicht selecteer start er een macro op basis van: Private Sub ComboBox1_DropButtonClick(). Echter als ik de combobox open klik maar niets selecteer en vervolgens wat anders doe, bijvoorbeeld in-/uitzoomen, dan blijft de Combobox opengeklikt en op de zelfde plaats staan, los van de Combobox. Visueel is dit storend en soms is het lastig om het weer goed te krijgen (interferentie met andere macro's).
Is er een truc om de ComboBox te sluiten als er niets wordt geselecteerd? Ik heb zelf het een en ander geprobeerd met Lostfocus, maar dat levert niets op.

Ik constateer zojuist dat 'keuzelijst met invoervak (formulierbesturingselement)' wel automatisch sluit indien je een andere actie in het werkblad uitvoert, zoals aanklikken van een cel. Het grote nadeel van dit besturingselement is echter dat je (o.a.) het lettertype niet kunt veranderen; dat valt bij mij (in dit geval) bijzonder klein uit.
 
Laatst bewerkt:
Misschien door gebruik te maken van de Combobox1_change()
 
Ik kan zelfs niet reproduceren wat jij ervaart. Van het moment dat ik de focus verleg van een geopende CB (zelfs om in- of uit te zoomen wordt de lijst automatisch gesloten.
Misschien dat deze wel iets doet.
Code:
Private Sub ComboBox1_LostFocus()
SendKeys ("{Enter}")
End Sub
 
Probleem opgelost:
Code:
Private Sub ComboBox1_DropButtonClick()
moet
Code:
Private Sub ComboBox1_Click()
zijn.

Hartelijk dank voor het meedenken.
 
Toch nog een probleempje met de comboBox, namelijk dat deze diverse keren geheel of gedeeltelijk (begint niet steeds helemaal bovenaan) wordt doorlopen, waarbij de laatste keer een foutmelding oplevert.
Code:
Private Sub ComboBox1_Click()
    Application.ScreenUpdating = False
    Unprotect "paswoord"
    On Error Resume Next
   [I] Rows(6).Resize(75).Hidden = False[/I]
    Set lrow = Range("rijen")
    Rows(75 - lrow).Resize(lrow).Hidden = True
    If Range("M76") = 0 Then Rows(75).Resize(2).Hidden = True
    Protect "Paswoord"
    Application.ScreenUpdating = True
    On Error GoTo 0

Het gaat om bovenstaande code waarbij er twee keer teruggegaan wordt naar de cursief geplaatste code; de derde keer wordt helemaal opnieuw bovenaan begonnen en loopt het vast op de cursieve code met de melding: Eigenschap 1004 tijdens uitvoering: Eigenschap Hidden van klasse Range kan niet ingesteld worden.

Door 'On Error Resume Next' te gebruiken weet ik de fout wel op te vangen, maar ik vind dat niet chique en belangrijker is dat het de nodige vertraging met zich meebrengt: de sheet die gemanipuleert wordt is nogal zwaar en het staat even te knipperen als een andere selectie gemaakt wordt in de combBox. Eigenlijk zou ik uit de procedure willen stappen na één procesgang, want dan lijkt het al helemaal in orde. Maar hoe doe ik dat op een nette manier?
 
Heb je nog andere event-macro's lopen op dat werkblad ?
Het vreemde is dat de procedure uit zichzelf terug begint te lopen, raar.
Met Exit Sub kan je steeds uit een procedure stappen, maar het is beter de oorzaak weg te nemen.
Is dit de volledige code bij het combobox-click event ?
 
Ja, inderdaad, ik heb nog enkele event-macro's lopen op het werkblad, maar die treden, op een uitzondering na, enkel in werking via een button. De uitzondering zijn een groot aantal checkboxen, die ook niets doen tenzij geactiveerd.
Wat ook erg vreemd is dat als ik via een macro de applicatie opentrek en dus ook de events stop (zie onderstaande macro), dit ook niet helemaal werkt: verandert de tekst op het bewuste werkblad, dan schiet toch alles weer in gang. Het is nog erger: loopt op een andere sheet in dezelfde werkmap/appliactie een event dat werkelijk niets met de betreffende sheet te maken heeft, dan wordt de comboBox1-event ook weer doorlopen - bizar.
Één keer doorlopen zou voldoende moeten zijn, wat allerlei wijzigingen in de betreffende sheet in werking zet, wat natuurlijk een nieuwe event kan veroorzaken. Met 'Exit Sub' lukt het niet om dit te doorbreken. Met een tellertje zie ik ook geen mogelijkheid. En ja, de essentie heb ik in vorige bereicht weerggeven en zo ook getest, met geschetst resultaat.
Ik bedenk me nu dat het lijkt alsof het event niet volldig wordt afgesloten.... Ik heb het nu weer ópgelost met de 'ComboBox1_DropButtonClick()', maar dan zijn we weer waar deze vraag mee begon.

Code:
ub Open_zetten()
    Call Beveiliging(False)
    Call Verberg_bladen(False)
    Excel_opschoon xlOff, True
    With Application
        .OnKey "+^{o}", "Open_zetten"
        .OnKey "+^{d}", "Dicht_zetten"
        .OnKey "+^{a}", "Afsluiten"
        .OnKey "+^{F12}", "Opslaan"
        .OnKey "+^{E}", "Data_Export"
        .OnKey "+^{?}", "Helpfile"
        .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
        .EnableEvents = False
    End With
End Sub
 
Een Change-, SelectionChange-, Calculate-event zijn events die zonder tussenkomst gestart worden.Een CB_Click-event normaal gezien niet.
Om hier dus een antwoord op te kunnen geven hebben we eigenlijk het betreffende bestand nodig om te kunnen testen waar het fout gaat.
Anders kan hier geen zinnig antwoord op gegeven worden omdat we totaal geen zicht hebben op wat er allemaal gebeurd.
 
Ik heb een grondig uitgekleed en geannonimiseerd (gevoelige bedrijfsgegevens) voorbeeld-bestand toegevoegd, dat echter volledig de essentie weergeeft - het gewraakte event is exact zoals in de uitgebreide versie. Ik denk dat het voor zich wijst: in de combobox maak je een keuze en vervolgens worden de bijbehorende gegevens opgehaald en de omvang van de tabel wordt hier op aangepast. Ik hoop dat je er wat mee kunt.
 

Bijlagen

  • Declarabiliteit per medewerker en team - jan-april 2014 - marion.xlsm
    96,2 KB · Weergaven: 39
ik heb gemerkt dat het toegestuurde voorbeeld ´op slot´ gaat en te veel onnodige code bevat. Bij deze het voorbeeld nog wat verder uitgekleed, ter illustratie van het hierboven geschetste probleem
 

Bijlagen

  • voorbeeld.xlsm
    66,7 KB · Weergaven: 33
Kijk eens of deze enige verbetering brengt.
Code:
Private Sub ComboBox1_Click()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        Rows(6).Resize(75).Hidden = False
        Set lrow = Range("rijen")
        Rows(75 - lrow).Resize(lrow).Hidden = True
        .Goto Range("A1"), True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
End Sub
 
Wat een vreemde code voor een combobox gebeurtenis !
Wat is de de zin hiervan ?
 
Bedankt warme bakkertje, de afhandeling van hetgeen moet gebeuren gebeurt nu aanzienlijk sneller en is daarmee zeker een vooruitgang. Maar ik begon mijn vraag met
Ik gebruik een combobox1 in een Excel-sheet. Dit werkt prima: als ik een item in het opengeklikte overzicht selecteer start er een macro op basis van: Private Sub ComboBox1_DropButtonClick(). Echter als ik de combobox open klik maar niets selecteer en vervolgens wat anders doe, bijvoorbeeld in-/uitzoomen, dan blijft de Combobox opengeklikt en op de zelfde plaats staan, los van de Combobox. Visueel is dit storend en soms is het lastig om het weer goed te krijgen (interferentie met andere macro's).
Is er een truc om de ComboBox te sluiten als er niets wordt geselecteerd? Ik heb zelf het een en ander geprobeerd met Lostfocus, maar dat levert niets op.
Dit ´probleem` blijft hiermee nog wel bestaan.

Voor snb: kijk gewoon even wat de code doet, dan heb je antwoord op je vraag. Ik vind er niets vreemds aan, maar misschien kun je ons overtuigen dat het allemaal slimmer kan - daar sta ik altijd voor open.
 
Ik heb het in een andere draad van je al aangegeven: jij probeert de ingebouwde faciliteiten van een tabel zelf uit te vinden.

Maak van je gegevens gewoon een tabel met wat extra kolommen voor berekeningen en je bent klaar. Een van de kolommen (velden) is dan de afdeling. Via het ingebouwde uitklapmenu van de tabel selecteer je van welke afdeling je de gegevens wil zien. Geen combobox nodig.
 
Je hebt ongetwijfeld gelijk snb, maar ik ben nu al zo ver, het werkt uitstekend en er hangt zo veel vanaf, dat ik het voorlopig maar zo laat. De wet van de remmende voorsprong: omwerken gaat heel veel tijd kosten die ik nu even niet heb. Maar ik ga het wel verkennen voor een volgende project.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan