
VBA技巧12-单元格中的数据有效性.doc
6页技巧1 单元格中的数据有效性1-1 在单元格中建立数据有效性在单元格中建立数据有效性可以使用Add方法,如下面的代码所示001 Sub Validation()#002 With Range("A1:A10").Validation#003 .Delete#004 .Add Type:=xlValidateList, _#005 AlertStyle:=xlValidAlertStop, _#006 Operator:=xlBetween, _#007 Formula1:="1,2,3,4,5,6,7,8"#008 End With#009 End Sub代码解析:使用Add方法在A1:A10单元格中建立数据有效性第3行代码删除已建立的数据有效性,防止代码运行出错第4行到第7行代码使用Add方法建立数据有效性应用于Validation对象的Add方法的语法如下:expression.Add(Type, AlertStyle, Operator, Formula1, Formula2)参数expression是必需的,返回一个Validation对象。
参数Type是必需的,数据有效性类型参数AlertStyl是可选的,有效性检验警告样式参数Operator是可选的,数据有效性运算符参数Formula1是可选的,数据有效性公式的第一部分参数Formula2是可选的,当Operator为xlBetween或xlNotBetween时,数据有效性公式的第二部分(其他情况下,此参数被忽略)Add 方法所要求的参数依有效性检验的类型而定,如Error! Reference source not found.所示数据有效性类型参数xlValidateCustomFormula1 必需,忽略 Formula2Formula1 必须包含一个表达式,数据项有效时该表达式取值为 True,而数据项无效时取值为 FalsexlInputOnly能使用 AlertStyle、Formula1 或 Formula2 参数xlValidateListFormula1 必需,忽略 Formula2Formula1 必须包含以逗号分隔的取值列表,或引用此列表的工作表xlValidateWholeNumber、xlValidateDate、xlValidateDecimal、xlValidateTextLength 或 xlValidateTime必须指定 Formula1 或 Formula2 之一,或两者均指定。
表格 11 数据有效性类型1-2 判断单元格是否存在数据有效性在VBA中没有专门的属性判断单元格是否存在数据有效性设置,可以使用Validation对象的有效性类型和错误陷阱来判断,如下面的代码所示001 Sub Validation()#002 On Error GoTo Line#003 If Range("A2").Validation.Type >= 0 Then#004 MsgBox "单元格有数据有效性!"#005 Exit Sub#006 End If#007 Line:#008 MsgBox "单元格没有数据有效性!"#009 End Sub代码解析:Validation过程使用Validation对象的有效性类型和错误陷阱来判断A2单元格中是否存在数据有效性第6行代码,如果A2单元格中存在数据有效性,Type参数值就会大于等于0,否则就会发生错误,使用On Error GoTo捕捉到错误后转移到第8行代码,显示一个消息框1-3 动态的数据有效性利用VBA可以在单元格中建立动态的数据有效性,如下面的代码所示。
001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)#002 If Target.Column = 1 And Target.Count = 1 And Target.Row > 1 Then#003 With Target.Validation#004 .Delete#005 .Add Type:=xlValidateList, _#006 AlertStyle:=xlValidAlertStop, _#007 Operator:=xlBetween, _#008 Formula1:="主机,显示器"#009 End With#010 End If#011 End Sub#012 Private Sub Worksheet_Change(ByVal Target As Range)#013 If Target.Column = 1 And Target.Row > 1 And Target.Count = 1 Then#014 With Target.Offset(0, 1).Validation#015 .Delete#016 Select Case Target#017 Case "主机"#018 .Add Type:=xlValidateList, _#019 AlertStyle:=xlValidAlertStop, _#020 Operator:=xlBetween, _#021 Formula1:="Z286,Z386,Z486,Z586"#022 Case "显示器"#023 .Add Type:=xlValidateList, _#024 AlertStyle:=xlValidAlertStop, _#025 Operator:=xlBetween, _#026 Formula1:="三星17,飞利浦15,三星15,飞利浦17"#027 End Select#028 End With#029 End If#030 End Sub代码解析:第1行到第11行代码,工作表的SelectionChange事件,当选择工作表的A列单元格时,在A2以下的单元格中建立动态的数据有效性。
其中第2行代码,利用SelectionChange事件的Target参数来限制事件的触发条件第3行到第9行代码使用Add方法在A列单元格中建立数据有效性应用于Validation对象的Add方法请参阅技巧Error! Reference source not found.第12行到第30行代码,工作表的Change事件,当工作表A列单元格内容改变时,在B列单元格中建立动态的数据有效性其中第16行到第27行代码,根据A列单元格的内容在B列对应的单元格中建立数据有效性,其Formula1参数的值根据A列单元格的内容而变化,使之达到动态数据有效性的效果,如Error! Reference source not found.、Error! Reference source not found.所示图 11 动态数据有效性1图 12 动态数据有效性21-4 自动展开数据有效性下拉列表选择工作表单元格时自动展开数据有效性的下拉列表,如下面的代码所示001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)#002 If Target.Column = 5 Then Application.SendKeys "%{down}"#003 End Sub代码解析:当选择工作表的E列中有数据有效性的单元格时使用SendKeys方法发送Alt+向下键,打开数据有效性的下拉列表。
应用于Application对象的SendKeys方法将击键发送给活动应用程序,语法如下:expression.SendKeys(Keys, Wait)参数expression是可选的,该表达式返回一个Application对象参数Keys是必需的,要发送的键或者组合键,以文本方式表示Keys参数可以指定任何单个键或与Alt、Ctrl 或Shift的组合键(或者这些键的组合)每个键可用一个或多个字符表示例如,"a" 表示字符 a,或者 "{ENTER}" 表示 Enter若要指定在按相应键时不会显示的字符(例如,Enter 或 Tab),请使用如Error! Reference source not found.所列的代码来表示相应的键,表中的每个代码表示键盘上的一个键键代码Backspace{BACKSPACE} 或 {BS}Break{BREAK}Caps Lock{CAPSLOCK}Clear{CLEAR}Delete 或 Del{DELETE} 或 {DEL}End{END}Enter~(波形符)Enter(数字小键盘){ENTER}Esc{ESCAPE} 或 {ESC}F1 到 F15{F1} 到 {F15}Help{HELP}Home{HOME}Ins{INSERT}Num Lock{NUMLOCK}Page Down{PGDN}Page Up{PGUP}Return{RETURN}Scroll Lock{SCROLLLOCK}Tab{TAB}向上键{UP}向下键{DOWN}向右键{RIGHT}向左键{LEFT}表格 12 按键代码。












