用于根据从另一个数据验证列表中选择的值在数据验证列表中隐藏值的宏

时间:2014-11-06 12:39:40

标签: excel vba validation excel-vba

我需要你的帮助来编写一个宏,用于在下一列中显示唯一值(对于假设B列),它应该是列表格式,基于从数据验证列表中选择的值(对于假设,这是在A栏中。

我希望通过提供我用于此宏的数据来更具体,因为我仍然是编写这些宏的初学者,我将非常感谢您的帮助。


流程定义

流程规划

新流程计划

修订现有流程

从利益相关方收到的QMS反馈

分析收到的反馈

流程审核

流程推广活动

流程试点

流程整合研讨会

新流程培训

流程实施

促进支持职能

审核管理

审核计划

执行。协调和进行审核

审计报告准备和支持

纠正措施和预防措施 - 后续行动

审核状态更新

审计分析

审核结束

度量

指标整理促进

项目和支持的度量标准收集

项目和支持的度量标准分析

管理评论

MRM调度

MRM演示准备

预MRM

协调和进行管理评审

行动项目后续行动

流程培训

迎新训练

内部审计员培训

流程培训


所以我想在B栏中创建一个数据验证列表:B4:B25'上面以粗体显示的所有标题和C列中的另一个数据验证列表:C4:C5'每个标题下面的所有相应数据。如果我选择"流程定义"来自' B4' DV列表,然后我想要标题1下面的数据,即"流程规划,新流程计划.....等等#34;显示在' C4'中的数据验证列表中。

提前致谢。欢呼声。

1 个答案:

答案 0 :(得分:0)

考虑到A列中已有一个下拉列表,其值为“a”& “b”,在VBA中使用 Workbook_SheetChange 事件,根据A列中的值select填充B列中的值:

e.g。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Column = 1 Then 'To run only when the value is changed in column A
        Cells(Target.Row, 2).Select
        Cells(Target.Row, 2).Value = ""  'Initializes value of dependent dropdown to blank
        If Target.Value = "a" Then
        'Add 1,2,3,4 to dependent dropdown if value of Column A is "a"
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="1,2,3,4" 'Change 1,2,3,4 to values that you need for a
                .IgnoreBlank = False
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
            End With
        ElseIf Target.Value = "b" Then
        'Add 1,2,3,4 to dependent dropdown if value of Column A is "b"
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="5,6,7,8" 'Change 5,6,7,8 to values that you need for b
                .IgnoreBlank = False
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
            End With
        Else
            Exit Sub
        End If
    End If
End Sub

编辑: 您所需要的只是将目标值(Target.Value)和我的代码中给出的Formula1中的值更改为您需要的值。这样的事情可以帮到你:

If Target.Value = "Process Definition" Then
'Create dependent dropdown when value of Column A is "Process Definition"
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Process Planning,New process initiatives,Amendment of existing process, and so on.."
        .IgnoreBlank = False
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
ElseIf Target.Value = "Process Implementation" Then
'Create dependent dropdown when value of Column A is "Process Implementation"
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Facilitation to support functions"
        .IgnoreBlank = False
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
ElseIf Target.Value = "Audit Management" Then
'Create dependent dropdown when value of Column A is "Audit Management"
    With Selection.Validation
        <similar code as above>
    End With
ElseIf...and so on..
Else
    Exit Sub
End If

您可以使用Excel的“数据”选项卡中的“数据验证”选项或使用其他VBA代码创建第一个下拉列表(流程定义,流程实施,审计管理等)(两者的文档都可以在Internet上轻松获得)。您也可以参考Axel Richter的链接。