仅当一个单元格为空时才创建下拉列表

时间:2011-12-12 03:05:14

标签: excel excel-vba drop-down-menu vba

假设我有一个包含形状(正方形,圆形,三角形)和颜色(红色,蓝色,绿色)的目录。每个产品都有它独特的代码(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不再为空。

你们觉得怎么样?我真的可以在这里使用一些输入。

1 个答案:

答案 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

有没有人有更好的解决方案?