• 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
  • 相关阅读:
    Luogu1053 NOIP2005篝火晚会
    BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)
    Luogu1155 NOIP2008双栈排序(并查集)
    Luogu1092 NOIP2004虫食算(搜索+高斯消元)
    Codeforces Round#516 Div.1 翻车记
    Luogu1731 NOI1999生日蛋糕(搜索)
    洛谷 P1379 八数码难题 解题报告
    洛谷 P2501 [HAOI2006]数字序列 解题报告
    洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 解题报告
    洛谷 P2894 [USACO08FEB]酒店Hotel 解题报告
  • 原文地址:https://www.cnblogs.com/Aaron-Lee/p/9962690.html
Copyright © 2020-2023  润新知