资源描述:
《vba技巧12 单元格中的数据有效性》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、技巧1单元格中的数据有效性1-1在单元格中建立数据有效性在单元格中建立数据有效性可以使用Add方法,如下面的代码所示。#001SubValidation()#002WithRange("A1:A10").Validation#003.Delete#004.AddType:=xlValidateList,_#005AlertStyle:=xlValidAlertStop,_#006Operator:=xlBetween,_#007Formula1:="1,2,3,4,5,6,7,8"#008EndWith#009EndSub代码解析:使用A
2、dd方法在A1:A10单元格中建立数据有效性。第3行代码删除已建立的数据有效性,防止代码运行出错。第4行到第7行代码使用Add方法建立数据有效性。应用于Validation对象的Add方法的语法如下:expression.Add(Type,AlertStyle,Operator,Formula1,Formula2)参数expression是必需的,返回一个Validation对象。参数Type是必需的,数据有效性类型。参数AlertStyl是可选的,有效性检验警告样式。参数Operator是可选的,数据有效性运算符。参数Formula1是
3、可选的,数据有效性公式的第一部分。参数Formula2是可选的,当Operator为xlBetween或xlNotBetween时,数据有效性公式的第二部分(其他情况下,此参数被忽略)。Add方法所要求的参数依有效性检验的类型而定,如表格11所示。数据有效性类型参数xlValidateCustomFormula1必需,忽略Formula2。Formula1必须包含一个表达式,数据项有效时该表达式取值为True,而数据项无效时取值为False。xlInputOnly能使用AlertStyle、Formula1或Formula2参数。xlV
4、alidateListFormula1必需,忽略Formula2。Formula1必须包含以逗号分隔的取值列表,或引用此列表的工作表。xlValidateWholeNumber、xlValidateDate、xlValidateDecimal、xlValidateTextLength或xlValidateTime必须指定Formula1或Formula2之一,或两者均指定。表格11数据有效性类型1-1判断单元格是否存在数据有效性在VBA中没有专门的属性判断单元格是否存在数据有效性设置,可以使用Validation对象的有效性类型和错误陷
5、阱来判断,如下面的代码所示。#001SubValidation()#002OnErrorGoToLine#003IfRange("A2").Validation.Type>=0Then#004MsgBox"单元格有数据有效性!"#005ExitSub#006EndIf#007Line:#008MsgBox"单元格没有数据有效性!"#009EndSub代码解析:Validation过程使用Validation对象的有效性类型和错误陷阱来判断A2单元格中是否存在数据有效性。第6行代码,如果A2单元格中存在数据有效性,Type参数值就会大于等于
6、0,否则就会发生错误,使用OnErrorGoTo捕捉到错误后转移到第8行代码,显示一个消息框。1-2动态的数据有效性利用VBA可以在单元格中建立动态的数据有效性,如下面的代码所示。#001PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)#002IfTarget.Column=1AndTarget.Count=1AndTarget.Row>1Then#003WithTarget.Validation#004.Delete#005.AddType:=xlValidateList,_
7、#006AlertStyle:=xlValidAlertStop,_#007Operator:=xlBetween,_#008Formula1:="主机,显示器"#009EndWith#010EndIf#011EndSub#012PrivateSubWorksheet_Change(ByValTargetAsRange)#013IfTarget.Column=1AndTarget.Row>1AndTarget.Count=1Then#014WithTarget.Offset(0,1).Validation#015.Delete#016Se
8、lectCaseTarget#017Case"主机"#018.AddType:=xlValidateList,_#019AlertStyle:=xlValidAlertStop,_#020Op