假设我有一个包含形状(正方形,圆形,三角形)和颜色(红色,蓝色,绿色)的目录。每个产品都有它独特的代码(SR = Red Square,TB = Blue Triangle等)。 在A列中,用户可以分别输入目录号,在B和C列中输入形状和颜色。
我想要的是,如果用户输入目录号,则自动填充B和C(我知道该怎么做),或者如果用户没有输入猫。数字,然后B和C有下拉菜单供他选择。
我一直在努力创造一个能够做到这一点的功能,但我一直无法成功。
以下是我一直在做的事情:
Function DropDown(Clave As String)
If Len(Clave) =0 Then
With ActiveCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Shapes"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
'Code that finds the shape depending on Clave input
End If
End Function
到目前为止,我已设法创建一个函数,如果用户输入cat。数字,那么下拉列表只有一个元素具有正确的选择,但下拉列表的单元格是空的,直到用户选择菜单,这完全违背了目的。如果下拉列表可以自动选择唯一的选择,或者作为缺陷,则可以解决这个问题。
修改
如果输入为空,上面的代码能够创建一个下拉列表,问题是弹出窗口立即显示数据不一致(显而易见,因为它显示了函数{{1} })。另一个问题是,如果用户选择其中一个选项,该功能将从单元格中删除,功能就会丢失。
我一直在考虑解决这个问题,但仍无济于事。一种想法是运行一个宏来检查文档中的所有下拉菜单,如果列表中只有一个选项,则宏会自动选择它。问题是我想动态动态,这意味着如果用户输入了猫。没有。选择下拉选项,但如果删除它,则下拉列表将变为空白。
编辑2
我一直在想我可以使用依赖于Cat的事件转换器。号细胞,解决问题。例如,假设A1是Cat。号细胞。如果为空,则在B1和C1中,宏代码检测空单元格并分别为形状和颜色创建下拉列表。当用户在单元格中键入内容时,事件转换器会检测到它,并且宏用代码信息填充单元格,因为它检测到A1不再为空。
你们觉得怎么样?我真的可以在这里使用一些输入。
答案 0 :(得分:1)
我最终做了我在 EDIT 2 上提出的建议。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("A1")) Is Nothing Then
If Range("A1") = "" Then
Range("B1") = ""
With Range("B1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Shapes"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("C1") = ""
With Range("C1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Colors"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
Range("B1").Validation.Delete
Range("C1").Validation.Delete
Range("B1") = 'Code that searches the correct shape depending on A1.
Range("B1") = 'Code that searches the correct color depending on A1.
End If
End If
End Sub
有没有人有更好的解决方案?