Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值

Posted Aaron_M

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值相关的知识,希望对你有一定的参考价值。

在很多的报表开发中,需要用到VBA去设置Excel的一些规则。 

以下是一个根据下拉框单元格的值来给特定单元格进行赋值的代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next:
    Application.ScreenUpdating = False
    If Target.Column = 7 Then        // 这是需要赋值的DDL列
        If Target.Offset(0, -2).Value = 13 Then  //表示赋值列往前移动两个单位的格子值
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="No"   //赋值为No
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .IMEMode = xlIMEModeNoControl
            .ShowInput = True
            .ShowError = True
            End With
        ElseIf Target.Offset(0, -2).Value <> 13 Then
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=Exp"  //这里的Exp为自定义名字的列作为数据来源(Formulas -〉Name managers ) 
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .IMEMode = xlIMEModeNoControl
           .ShowInput = True
            .ShowError = True
            End With
        End If
    ElseIf Target.Column = 8 Then   //下面的逻辑用来控制,当第7列值为No时,会把第8,910,11列保护起来不能输入
        If Target.Offset(0, -1).Value = "No" Then
            Target.Locked = True
            Target.Offset(1, -6).Select
        End If
    ElseIf Target.Column = 9 Then
        If Target.Offset(0, -2).Value = "No" Then
            Target.Locked = True
            Target.Offset(1, -7).Select
        End If
    ElseIf Target.Column = 10 Then
        If Target.Offset(0, -3).Value = "No" Then
            Target.Locked = True
            Target.Offset(1, -8).Select
        End If
    ElseIf Target.Column = 11 Then
        If Target.Offset(0, -4).Value = "No" Then
            Target.Locked = True
            Target.Offset(1, -9).Select
        End If
    End If
    Application.ScreenUpdating = True
     
End Sub

 

以上是关于Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba中怎样填写数值改变单元格后触发事件

Excel VBA/Formula 用于根据 2 个其他单元格的值填充 3 个特定单元格

excel VBA 组合框 取值

java导出excel,单元格的格式为下拉框。打开excel时,提示发现不可读取内容和已修复了公式和单元格值

从 vba 中的单元格地址获取 excel 合并单元格的值

用vba给Excel单元格赋值