Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel 2016中使用VBA创建相关下拉列表?_Vba_Excel_Nested_Dropdown - Fatal编程技术网

如何在Excel 2016中使用VBA创建相关下拉列表?

如何在Excel 2016中使用VBA创建相关下拉列表?,vba,excel,nested,dropdown,Vba,Excel,Nested,Dropdown,我想在以下工作表(计划)的B列中创建一个下拉列表: D3单元格包含要显示的语言。当在a列中输入尺寸时,我想要一个按输入尺寸过滤的零件下拉列表 数据包含在以下工作表(数据)中: 使事情复杂化的是,我希望下拉列表根据计划中选择的语言显示数据工作表中的内容。$D3(如果选择英语,则显示绿色文本;如果选择日语,则显示红色文本)。下拉列表(2、8、15,…)中应仅显示带有标注和标签==“索引”的行。选择后,下拉列表应显示零件数据(蓝色) 如何在VBA中构建这样一个下拉列表?这是一个有趣的问题,当在a列

我想在以下工作表(计划)的B列中创建一个下拉列表:

D3单元格包含要显示的语言。当在a列中输入尺寸时,我想要一个按输入尺寸过滤的零件下拉列表

数据包含在以下工作表(数据)中:

使事情复杂化的是,我希望下拉列表根据计划中选择的语言显示数据工作表中的内容。$D3(如果选择英语,则显示绿色文本;如果选择日语,则显示红色文本)。下拉列表(2、8、15,…)中应仅显示带有标注和标签==“索引”的行。选择后,下拉列表应显示零件数据(蓝色)


如何在VBA中构建这样一个下拉列表?

这是一个有趣的问题,当在a列中输入维度代码时,我使用在B列中的单元格上设置验证的方法获得了下面的代码

选择选项后,列B中文本的颜色将更改为蓝色,但实际上不可能选择所需的绿色和红色文本,因为无论单元格的字体颜色如何,“单元格内”下拉列表始终显示黑色

代码不是完美的,但更多的只是一个概念的证明和一些给你一个大的开端

Dim CHANGING_VAL As Boolean 'Global Variable that can be set to prevent the onchange being fired when the Macro is removing the description from the dropdown.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)


    If Target.Column = 2 And CHANGING_VAL = False Then
        CHANGING_VAL = True
        If InStr(1, Target.Value, "~") > 2 Then
            Target.Value = Left(Target.Value, InStr(1, Target.Value, "~") - 2)
        End If
        Target.Validation.Delete
        Target.Font.Color = RGB(0, 0, 255)
        CHANGING_VAL = False
    End If

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Column = 2 Then
        If Target.Offset(0, -1) <> "" Then
            strValidList = ""
            For intRow = 1 To 300
                If Sheets("Data").Cells(intRow, 1) = Target.Offset(0, -1) Then
                    If Sheets(Target.Parent.Name).Cells(3, 4) = "English" Then
                        strValidList = strValidList & Sheets("Data").Cells(intRow, 2) & " ~ " & Sheets("Data").Cells(intRow, 3) & ", "
                    Else
                        strValidList = strValidList & Sheets("Data").Cells(intRow, 2) & " ~ " & Sheets("Data").Cells(intRow, 4) & ", "
                    End If
                End If
            Next

            If strValidList <> "" Then
                strValidList = Left(strValidList, Len(strValidList) - 2)

                Target.Select

                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=strValidList
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = True
                End With
            End If
        End If
    Else
        Sheets(Target.Parent.Name).Range("B:B").Validation.Delete
    End If

End Sub
Dim CHANGING_VAL As Boolean'全局变量,可设置该变量以防止在宏从下拉列表中删除描述时触发onchange。
私有子工作簿(ByVal Sh作为对象,ByVal目标作为范围)
如果Target.Column=2且CHANGING_VAL=False,则
更改值=真
如果指令(1,目标值,“~”)大于2,则
Target.Value=Left(Target.Value,InStr(1,Target.Value,“~”)-2)
如果结束
Target.Validation.Delete
Target.Font.Color=RGB(0,0255)
更改值=False
如果结束
端接头
私有子工作簿\u Sheet SelectionChange(ByVal Sh作为对象,ByVal目标作为范围)
如果Target.Column=2,则
如果目标偏移量(0,-1)”,则
strValidList=“”
对于intRow=1到300
如果图纸(“数据”).单元格(intRow,1)=目标偏移量(0,-1),则
如果Sheets(Target.Parent.Name).Cells(3,4)=“English”,则
strValidList=strValidList&Sheets(“数据”)。单元格(intRow,2)和“~”&Sheets(“数据”)。单元格(intRow,3)和“,”
其他的
strValidList=strValidList&Sheets(“数据”)。单元格(intRow,2)和“~”&Sheets(“数据”)。单元格(intRow,4)和“,”
如果结束
如果结束
下一个
如果列表为“”,则
strValidList=Left(strValidList,Len(strValidList)-2)
目标。选择
选择。验证
删去
.Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:=xlBetween,公式1:=strValidList
.IgnoreBlank=True
.InCellDropdown=True
.InputTitle=“”
.ErrorTitle=“”
.InputMessage=“”
.ErrorMessage=“”
.ShowInput=True
.ror=真
以
如果结束
如果结束
其他的
工作表(Target.Parent.Name).范围(“B:B”).验证.Delete
如果结束
端接头

单元格内显示的下拉菜单只能通过验证生成,因此您可以在a列中输入值后使用VBA设置每个单元格所需的验证,也可以使用包含下拉列表的表单,该列表在a列中输入值后弹出。您需要循环查看图纸数据以提取零件。谢谢您的回复。我可能实际上没有很好地表达这个问题。我并没有试图改变数据的颜色,而是用彩色数据创建下拉列表。我将编辑我的问题以更准确地反映这一点。