ich habe hier in einer Tabelle einen Bereich
[Tabelle1!G2:G500].
Diesen Zellen habe ich einen Namen gegeben: „=Namen“ und in
einem anderen Bereich [Tabelle2!A4:A100] per
Datengültigkeit/Liste ein Pulldown-Menü erzeugt.
Ist es [ggf. per VBA] möglich das Pulldown so anzupassen das
zB. bei der Eingabe des ersten Buchstabens nur eine Auswahl
angezeigt wird, damit die Liste nicht so lang ist?
Hallo Holger,
die Datei:
http://www.hostarea.de/server-03/Maerz-faf063c608.xls
Auswahl in einer Gültigkeitsliste löst keinen Event aus, deshlab mußte ich die Formeln in B reinschreiben und dann den Event Calculate ausnutzen.
Die Liste steht in Tab1!G2:G17, in Tab1 Spalte E stehen die Anfangsbuchstaben aller Namen in der Liste, in Spalte F jeder Anfangsbuchstabe nur einmal. Die Buchstabne in F haben den namen „Buchstaben“.
WahlA9 bedeutet, die Namen in Tab1!$G$10:blush:G$12 fangen alle mit dem E in A9 an.
Die Listen in Tab1!E:G werdnn aktualisiert und sortiert wenn du in G etwas abänderst.
Tabellenblatt: [Mappe1]!Tabelle2
│ A │ B │
───┼────────┼────────┤
4 │ Dieter │ Dieter │
───┼────────┼────────┤
5 │ │ 0 │
───┼────────┼────────┤
6 │ │ 0 │
───┼────────┼────────┤
7 │ Dieter │ Dieter │
───┼────────┼────────┤
8 │ │ 0 │
───┼────────┼────────┤
9 │ E │ E │
───┼────────┼────────┤
10 │ │ 0 │
───┼────────┼────────┤
11 │ │ 0 │
───┼────────┼────────┤
12 │ │ 0 │
───┼────────┼────────┤
13 │ │ 0 │
───┴────────┴────────┘
Benutzte Formeln:
B4 : =A4
B5 : =A5
B6 : =A6
B7 : =A7
B8 : =A8
B9 : =A9
B10: =A10
B11: =A11
B12: =A12
B13: =A13
Festgelegte Namen:
Auswahl : =Tabelle2!$A$4:blush:A$13, unbenutzt in Selektion.
Buchstaben: =Tabelle1!$F$2:blush:F$11, unbenutzt in Selektion.
Namen : =Tabelle1!$G$2:blush:G$17, unbenutzt in Selektion.
WahlA4 : =Tabelle1!$G$7:blush:G$9, unbenutzt in Selektion.
WahlA7 : =Tabelle1!$G$7:blush:G$9, unbenutzt in Selektion.
WahlA9 : =Tabelle1!$G$10:blush:G$12, unbenutzt in Selektion.
A4:B13
haben das Zahlenformat: Standard
Codes in Tabelle1 :
Private Sub Worksheet\_Change(ByVal Target As Excel.Range)
Dim Zei As Long, colC As New Collection, C As Integer, Z As Long, F As String
If Target.Column 7 Then Exit Sub
Zei = Cells(Rows.Count, 7).End(xlUp).Row
Range("G2:G" & Zei).Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlGuess, \_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("E:F").ClearContents
Range("E2:E" & Zei).FormulaLocal = "=Links(G2;1)"
Range("E2:E" & Zei).Value = Range("E2:E" & Zei).Value
On Error Resume Next
For Z = 2 To Zei
colC.Add Item:=Left(Cells(Z, 7), 1), key:=Left(Cells(Z, 7), 1)
If Err.Number = 0 Then
Cells(colC.Count + 1, 6) = colC(colC.Count)
Else
Err.Clear
End If
Next Z
On Error GoTo 0
ActiveWorkbook.Names.Add Name:="Buchstaben", RefersToR1C1:="=Tabelle1!R2C6:R" & colC.Count & "C6"
End Sub
Codes in Tabelle2 :
Private Sub Worksheet\_Calculate()
Dim Von As Long, Bis As Long, strN As String
With ActiveCell
If .Column 1 Then Exit Sub
If .Value = "" Then
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= \_
xlBetween, Formula1:="=Buchstaben"
End With
ElseIf Len(.Value) = 1 Then
Von = Application.Match(.Value, Worksheets("Tabelle1").Columns(5), 0)
Bis = Von
While Worksheets("Tabelle1").Cells(Bis, 5) = Worksheets("Tabelle1").Cells(Bis + 1, 5)
Bis = Bis + 1
Wend
strN = "Wahl" & .Address(0, 0)
ActiveWorkbook.Names.Add Name:=strN, RefersToR1C1:="=Tabelle1!R" & Von & "C7:R" & Bis & "C7"
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= \_
xlBetween, Formula1:="=" & strN
End With
End If
End With
End Sub
'
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
If Target.Column 1 Then Exit Sub
If Target.Cells.Count 1 Then Exit Sub
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= \_
xlBetween, Formula1:="=Buchstaben"
End With
End Sub
'
Sub tt()
Application.EnableEvents = True
End Sub
Gruß
Reinhard