|
楼主 |
发表于 2009-2-11 00:38
|
显示全部楼层
第1部分Range(单元格)对象
技巧12 单元格中的数据有效性
12-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
复制代码 代码解析:
Validation过程使用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 方法所要求的参数依有效性检验的类型而定,如表格所示。
12-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行代码,显示一个消息框。
12-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方法请参阅技巧12-1。
第12行到第30行代码,工作表的Change事件,当工作表A列单元格内容改变时,在B列单元格中建立动态的数据有效性。
其中第16行到第27行代码,根据A列单元格的内容在B列对应的单元格中建立数据有效性,其Formula1参数的值根据A列单元格的内容而变化,使之达到动态数据有效性的效果,如图所示。
12-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),请使用如表格所列的代码来表示相应的键,表中的每个代码表示键盘上的一个键。
当选择工作表中的E列单元格时将自动展开数据有效性的下拉列表,如图所示。
[ 本帖最后由 yuanzhuping 于 2009-2-16 22:19 编辑 ] |
|