Verborgen combobox komt steeds te voorschijn

Status
Niet open voor verdere reacties.

Joete

Gebruiker
Lid geworden
19 sep 2008
Berichten
87
Ik heb een bestand waarin ik gebruik maak van verborgen comboboxen die te voorschijn komen als je de gekoppelde cel activeert. Super mooi systeem, men kan typen en automatisch worden de ingevoerde letters aangevuld tot de opties die het mogen zijn. Achter de combobox hangt een gegevensvalidatie die alle mogelijke values bevat.

Alles werkt in principe goed, alleen wanneer ik één van de comboboxen ingevuld heb en ik voer ergens anders in het werkblad/werkmap een waarde in of druk op "delete" dan vouwt mijn combobox weer uit en kan ik die alleen maar krijgen als ik de waarde weer aanklik met de muis. Zodra ik dan in een ander veld iets invul komt ie weer te voorschijn, en zo gaat dat maar door...heel irritant...

De codes die ik gebruik (van 1 van de 2 comboboxen):
De combobox heet "RamingType":
Code:
Private Sub RamingType_Change()
    '#--------------#
    '|    RAMING    |
    '#--------------#
    RamingType.DropDown
    ' If RamingType.ListIndex = -1 Then RamingType.Value = ""
    RamingType.SelStart = 0
    RamingType.SelLength = RamingType.TextLength
End Sub

De code voor het verlaten van het veld:
Code:
Private Sub RamingType_Lostfocus()
    RamingType.Visible = False
End Sub

De code die kijkt of de juiste cel actief is en zorgt dat de combobox zichtbaar wordt:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '#-------------------#
    '|    COMBO BOXEN    |
    '#-------------------#
    Dim strRT, strAUT, strEHD As String
    Dim cboRT, cboAUT, cboEHD As OLEObject
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Cancel = True
    On Error GoTo errHandler
    
    If Target.Address = "$E$6:$G$6" Then
        '#--------------#
        '|    RAMING    |
        '#--------------#
        If Target.Validation.Type = 3 Then
            Set cboRT = ws.OLEObjects("RamingType")
            On Error Resume Next
            With cboRT
                .ListFillRange = ""
                .LinkedCell = ""
                .Visible = False
            End With
            ' als de cel data-validatie bevat
            Application.EnableEvents = False
            ' data-validatie info ophalen
            strRT = Target.Validation.Formula1
            strRT = Right(strRT, Len(strRT))
            With cboRT
                ' combobox met lijst laten zien
                .Visible = True
                .Left = Target.Left
                .Top = Target.Top
                .Width = Target.Width + 13 ' breder maken zodat het originele pijltje niet zichtbaar is
                .Height = Target.Height + 0
                .ListFillRange = strRT
                .Activate
                .LinkedCell = Target.Address
                .DropDown
            End With
        End If
    Else
        ' doe niets
        ' hier staat eigenlijk de code van de andere combobox met een elseif...
    End If
    
errHandler:
    Application.EnableEvents = True
    Exit Sub
End Sub

Nog een stukje code om de combobox met het toetsenbord op een fatsoenlijke manier te kunnen verlaten:
Code:
Private Sub RamingType_Keydown(ByVal Keycode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ' MsgBox KeyCode
    Select Case Keycode
        Case 9, 39
            ' Tab
            ' Pijl rechts
            ActiveCell.Offset(0, 1).Activate
            RamingType.Visible = False
        Case 27
            ' Escape
            ActiveCell.Value = ""
            ActiveCell.Offset(0, 1).Activate
            RamingType.Visible = False
        Case 13
            ' Enter
            ActiveCell.Offset(1, 0).Activate
            RamingType.Visible = False
        Case 37
            ' Pijl links
            ActiveCell.Offset(0, -1).Activate
            RamingType.Visible = False
        Case Else
            'doe niets
    End Select
End Sub

De combobox zou bij mijn weten met "If Target.Address = "$E$6:$G$6" Then" alleen te voorschijn mogen komen als ik in de samengevoegde cel E6:G6 zit. Zolang ik niet in die cel geweest ben laat ie inderdaad niets zien, maar zodra die actief is geweest komt ie bij iedere toets te voorschijn...

Loop hier nu al een week mee te stoeien, af en toe wat andere codes aanpassen/uitbreiden en andere problemen oplossen in de hoop dat ik ineens een heldere ingeving krijg, maar die blijft helaas tot nog toe uit...

Iemand die mij kan helpen om de comboboxen verborgen te houden tot ik in de juiste cel kom?
Alvast bedankt!
 
De code doet gewoon wat er staat.
Als je niet wil dat iets getoond wordt zul je ergens .visible=false moeten gebruiken.
Het is wel erg veel code voor een simpele taak.
 
snb je bent een topper! :thumb:

Niet dat ik een visible=false heb geplaatst, maar wel de heldere ingeving dat ik de dropdown niet wil...dus die uitgeschakeld en nu werkt het wel!
Ik had het bijna zelf kunnen bedenken...

Maar wat ik dan nog niet snap is dat de code binnen RamingType_Change() geactiveerd wordt. In principe veranderd er niks aan de combobox, tenzij ik de cel activeer toch? Dan zou ie toch nooit binnen die private sub kunnen komen?



Maar over je laatste opmerking: veel code voor een simpele taak. Ik heb zo'n gevoel dat je een eenvoudigere oplossing weet? Deze code komt oorspronkelijk van internet (http://www.contextures.com/xlDataVal11.html) en heb ik aangepast naar wat ik wilde. Heb de verschillende comboboxen uit elkaar getrokken zodat ik later eventueel de vrijheid heb om de ene aan te passen en de andere zo te laten.
 
Plaats dan maar eens een voorbeeldbestand.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan