Скажем, мы хотим начальные раскрывающихся меню на пять ячеек A1 через E1 быть:
Альфа, Бета, Гамма, Delta, Epsilon
Первый запуск этого макроса:
Sub InternalString()
Dim MyCells As Range, FullString As String
Dim r As Range
Set MyCells = Range("A1:E1")
FullString = "Alpha,Beta,Gamma,Delta,Epsilon"
Application.EnableEvents = False
With MyCells.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=FullString
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Application.EnableEvents = True
End Sub
Public Function RemoveItem(st As String, drop As String) As String
RemoveItem = Replace(Replace(st, drop, ""), ",,", ",")
End Function
Поскольку мы хотим, чтобы наш выбор для A1 быть удалены в качестве опции для клеток B1 через E1, поместите следующий макрос событий в рабочая область таблицы:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A1 As Range, v As String, PartString As String
Dim FullString As String
FullString = "Alpha,Beta,Gamma,Delta,Epsilon"
Dim rng As Range
Set A1 = Range("A1")
Set rng = Range("B1:E1")
If Intersect(A1, Target) Is Nothing Then Exit Sub
v = A1.Value
PartString = RemoveItem(FullString, v)
With rng.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=PartString
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Этот макрос обнаружит наш choi ce для A1 и удалите изделие по выбору для B1 via E1.
Ваши списки выпадающих непосредственно на листе или вы используете какое-то формы-объекты? если первый вам не нужен VBA – OlimilOops
мои выпадающие списки непосредственно на листе – phani