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":
De code voor het verlaten van het veld:
De code die kijkt of de juiste cel actief is en zorgt dat de combobox zichtbaar wordt:
Nog een stukje code om de combobox met het toetsenbord op een fatsoenlijke manier te kunnen verlaten:
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!
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!