image.png

本技巧的目的: 掌握创建数据有效性,判断是否存在数据有效性,根据当前选择和数据创建动态数据有效性。

  • 如下图的动态数据有效性:技巧012 用VBA代码控制数据有效性 - 图3
  • 技巧012 用VBA代码控制数据有效性 - 图4

    1. 使用代码助手

  • 代码助手下载地址 http://excel880.com/blog/archives/11297

  • 使用代码助手,输入中文: 数据有效性 + 空格, 可以弹出选择框,选择需要的代码,实现代码的快速输入。
  • 技巧012 用VBA代码控制数据有效性 - 图5
  • 代码助手可以随时收录需要的代码,方便下次使用。

    2. 创建数据有效性的方法

  • 通过录制宏可以得到基础代码:

  • 技巧012 用VBA代码控制数据有效性 - 图6
  • 注释:
  • Validation: 数据有效性
  • Delete: 删除
  • Add: 添加数据有效性验证
  • Type 必选 有效性验证类型:
  • xlValidateCustom: 必需有 Formula1: 必须有一个表达式,忽略 Formula2。 数据项有效时 True,数据项无效时 False
  • xlInputOnly: 使用 AlertStyle、Formula1 或 Formula2。
  • xlValidateList: 必需有Formula1: 必须包含以逗号分隔的值列表,或对该列表的工作表引用。忽略 Formula2
  • xlValidateWholeNumber、xlValidateDate、xlValidateDecimal、xlValidateTextLength 或 xlValidateTime
  • 必须指定 Formula1 或 Formula2 之一,或两者均指定。
  • AlertStyle 可选 有效性验证警告的样式。
  • xlValidAlertInformation:信息图标为标题的样式
  • xlValidAlertStop:停止图标为标题的样式
  • xlValidAlertWarning:警告图标为标题的样式
  • Operator 可选 数据有效性验证运算符
  • 技巧012 用VBA代码控制数据有效性 - 图7
  • Formula1 可选 数据有效性验证等式中的第一部分。
  • Formula2 可选 当 Operator 为 xlBetween 或 xlNotBetween 时,数据有效性验证等式的第二部分(其他情况下,此参数被忽略)。
  • IgnoreBlank: 数据有效性检验是否允许空值,允许: True 不允许:False
  • InCellDropdown: 是否含取值的下拉列表,是: True 否:False
  • InputTitle:设置数据有效性输入对话框的标题
  • ErrorTitle:设置数据有效性错误对话框的标题
  • InputMessage: 设置数据有效性检验输入信息
  • ErrorMessage: 设置数据有效性检验错误消息
  • IMEMode:设置日文输入规则的说明
  • 技巧012 用VBA代码控制数据有效性 - 图8
  • ShowInput 在数据有效性检查区域内选定了某一单元格时,显示数据有效性检查输入消息,为 True
  • ShowError 输入无效数据时显示数据有效性检查错误消息,为 True
  • 修改代码为:
  • 技巧012 用VBA代码控制数据有效性 - 图9
  • With [A1:A10].Validation ‘设置 A1:A10的数据有效性
  • .Delete ‘删除原来的
  • .Add Type:=xlValidateList, Formula1:=”1,2,3,4” ‘值列表类型,值:1,2,3,4
  • End With
  • 设置后:
  • 技巧012 用VBA代码控制数据有效性 - 图10

    3. 判断单元格是否存在数据有效性的方法


  • 技巧012 用VBA代码控制数据有效性 - 图11

  • 注释:
  • type: 返回以下值,它代表区域的数据类型有效性验证。
  • 技巧012 用VBA代码控制数据有效性 - 图12
  • On Error Resume Next ‘出现空值时会发生错误,加忽略错误语句
  • 执行后:
  • 检查 A11 单元格 结果:
  • 技巧012 用VBA代码控制数据有效性 - 图13
  • 检查 A2 单元格:
  • Sub 判断是否存在有效性()
  • Dim rng As Range
  • Set rng = [A2]
  • If 有效性判断(rng) Then ‘含有效性时
  • MsgBox “单元格” & rng.Address(0, 0) & “:存在有效性” ‘执行存在的代码
  • Else ‘不含有效性时
  • MsgBox “单元格” & rng.Address(0, 0) & “:不存在有效性” ‘执行不存在的代码
  • End If
  • End Sub
  • Function 有效性判断(r As Range)
  • Dim s
  • On Error Resume Next ‘忽略空值错误
  • s = r.Validation.Type ‘数据有效性返回值
  • If s <> “” Then ‘值不为空时
  • 有效性判断 = True ‘有数据有效性设置
  • Else ‘值为空时
  • 有效性判断 = False ‘无数据有效性设置
  • End If
  • End Function
  • ★★★注意:安装代码助手后,双击 TAB 可以实现自动排版功能,再也不用去手动对齐代码。
  • 结果:
  • 技巧012 用VBA代码控制数据有效性 - 图14

    4. 根据当前选择和数据创建动态数据有效性的方法

  • 建立动态数据有效性需要用到二个事件:

  • SelectionChange 当工作表上的选定区域发生改变时, Change 当用户更改工作表中的单元格
  • 技巧012 用VBA代码控制数据有效性 - 图15
  • 事件中还使用了模块中的函数,方便事件的调试。
  • 技巧012 用VBA代码控制数据有效性 - 图16
  • 注释:
  • If InStr(strlist, rng.Value) = 0 Then ‘当传入的列表值参数与原有单元格的值不相符时
  • rng = “” ‘原有单元格值置空
  • End If
  • If rng = “” Then ‘如果原有单元格为空时
  • rng.Select ‘选中单元格
  • Application.SendKeys “%{down}” ‘发送弹出列表框的指令
  • End If
  • 在语句打断点调试该过程:
  • 原来 A4 值为: 显示器 B4 值为: 显示器对应的 飞利浦15技巧012 用VBA代码控制数据有效性 - 图17
  • 当 A4 值 改变为: 主机时, 断点启动
  • 技巧012 用VBA代码控制数据有效性 - 图18
  • 代码进入子函数过程: 添加2级数据有效性X Target.Offset(0, 1), “Z286,Z386,Z486,Z586”
  • 技巧012 用VBA代码控制数据有效性 - 图19
  • 技巧012 用VBA代码控制数据有效性 - 图20
  • 传入的列表值参数与原有单元格的值不相符, B4 单元格 置空
  • 技巧012 用VBA代码控制数据有效性 - 图21
  • 选中 B4 单元格, 发送弹出列表框的指令
  • 技巧012 用VBA代码控制数据有效性 - 图22
  • 动态数据有效性建立完毕

    更多作品请百度搜索 郑广学

    VBA代码助手 懒人神器 在 EXCEL880.COM 官网下载