Ich habe Code auf einem Arbeitsblatt, das derzeit das BeforeDoubleClick verwendet. Dieser Code platziert eine Combobox über jede Zelle, auf die doppelgeklickt wird, die eine Datenüberprüfungsformel enthält. Die Combobox übernimmt die Formel.Excel - Dependent Data Validation ComboBox auf einen einzigen Klick
Ich mag dies, weil Sie die Datenüberprüfungsliste erhalten, aber Sie haben auch die Option für den Benutzer, die Combobox einzugeben und Autovervollständigung für die Datenüberprüfungsoptionen zu erhalten.
Das Arbeitsblatt selbst verfügt über zwei Datenüberprüfungsbereiche, einen für State, einen für City. Die Stadtdatenvalidierung hängt von der Auswahl für den Staat ab.
Ich mag es wirklich nicht, dass der Benutzer jedes Mal doppelt klicken müsste, wenn sie die Auswahl ändern möchten. Es wäre schön, wenn sie einfach klicken und es aufspringen lassen könnten.
Jede Hilfe wird geschätzt!
Arbeitsblatt Code: (Von http://www.contextures.com/xlDataVal11.html#works) ((Sie haben einen anderen Link (http://www.contextures.com/xlDataVal14.html) zeigt, wie dies auf Klick zu tun, aber wenn ich versuche, INDIREKTE für die = im Abschnitt hinzuzufügen (die die abhängigen Daten erlaubt Validierung) es nicht funktioniert.))
'==========================
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, _
Cancel As Boolean)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet
Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
With cboTemp
'clear and hide the combo box
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
On Error GoTo errHandler
If Target.Validation.Type = 3 Then
'if the cell contains
'a data validation list
Cancel = True
Application.EnableEvents = False
'get the data validation formula
str = Target.Validation.Formula1
str = Right(str, Len(str) - 1)
'for simple INDIRECT function (English)
' e.g. =INDIRECT(B2)
'will create dependent list of items
If Left(str, 4) = "INDI" Then
lSplit = InStr(1, str, "(")
str = Right(str, Len(str) - lSplit)
str = Left(str, Len(str) - 1)
str = Range(str).Value
End If
With cboTemp
'show the combobox with the list
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 15
.Height = Target.Height + 4
.ListFillRange = str
.LinkedCell = Target.Address
End With
cboTemp.Activate
'open the drop down list automatically
Me.TempCombo.DropDown
End If
errHandler:
Application.EnableEvents = True
Exit Sub
End Sub
'=========================================
Private Sub TempCombo_LostFocus()
With Me.TempCombo
.Top = 10
.Left = 10
.Width = 0
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End With
End Sub
'====================================
Private Sub TempCombo_KeyDown(ByVal _
KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Select Case KeyCode
Case 9 'Tab
ActiveCell.Offset(0, 1).Activate
Case 13 'Enter
ActiveCell.Offset(1, 0).Activate
Case Else
'do nothing
End Select
End Sub