VBA常用技巧(一) 下载本文

#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:=\#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方法请参阅技巧1。

第12行到第30行代码,工作表的Change事件,当工作表A列单元格内容改变时,在B列单元格中建立动态的数据有效性。

其中第16行到第27行代码,根据A列单元格的内容在B列对应的单元格中建立数据有效性,其Formula1参数的值根据A列单元格的内容而变化,使之达到动态数据有效性的效果,如图 x-1、图 x-2所示。

图 x-1

动态数据有效性1

图 x-2

动态数据有效性2

4. 自动展开数据有效性下拉列表

选择工作表单元格时自动展开数据有效性的下拉列表,如下面的代码所示。

#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range) #002 If Target.Column = 5 Then Application.SendKeys \#003 End Sub

代码解析:

当选择工作表的E列中有数据有效性的单元格时使用SendKeys方法发送Alt+向下键,打开数据有效性的下拉列表。

应用于Application对象的SendKeys方法将击键发送给活动应用程序,语法如下:

expression.SendKeys(Keys, Wait)

参数expression是可选的,该表达式返回一个Application对象。 参数Keys是必需的,要发送的键或者组合键,以文本方式表示。

Keys参数可以指定任何单个键或与Alt、Ctrl 或Shift的组合键(或者这些键的组合)。每个键可用一个或多个字符表示。例如,\ 表示字符 a,或者 \ 表示 Enter。

若要指定在按相应键时不会显示的字符(例如,Enter 或 Tab),请使用如表格 x-2所列的代码来表示相应的键,表中的每个代码表示键盘上的一个键。

键 Backspace Break 代码 {BACKSPACE} 或 {BS} {BREAK} Caps Lock Clear Delete 或 Del End Enter Enter(数字小键盘) Esc F1 到 F15 Help Home Ins Num Lock Page Down Page Up Return Scroll Lock Tab 向上键 向下键 向右键 向左键 {CAPSLOCK} {CLEAR} {DELETE} 或 {DEL} {END} ~(波形符) {ENTER} {ESCAPE} 或 {ESC} {F1} 到 {F15} {HELP} {HOME} {INSERT} {NUMLOCK} {PGDN} {PGUP} {RETURN} {SCROLLLOCK} {TAB} {UP} {DOWN} {RIGHT} {LEFT} 表格 x-2 按键代码

xi. 单元格中的公式

1. 在单元格中写入公式

使用Range对象的Formula属性可以在单元格区域中写入公式,如下面的代码所示。

#001 Sub rngFormula()

#002 Sheet1.Range(\

#003 End Sub

代码解析:

应用于Range对象的Formula属性返回或设置A1样式表示的Range对象的公式,语法如下:

expression.Formula

参数expression是必需的,返回一个Range对象。

还可以使用FormulaR1C1属性返回或设置以R1C1-样式符号表示的公式,如下面的代码所示。

#001 Sub rngFormulaRC()

#002 Sheet2.Range(\#003 End Sub

如果需要在单元格中写入数组公式则使用Range对象的FormulaArray属性。如下面的代码所示。

#001 Sub RngFormulaArray()

#002 Sheet3.Range(\#003 End Sub

Range对象的FormulaArray属性返回或设置单元格区域的数组公式。

2. 检查单元格是否含有公式

使用单元格的HasFormula属性检查单元格是否含有公式,如下面的代码所示。

#001 Private Sub CommandButton1_Click() #002 Select Case Selection.HasFormula #003 Case True

#004 MsgBox \公式单元格!\#005 Case False

#006 MsgBox \非公式单元格!\#007 Case Else

#008 MsgBox \公式区域:\& Selection.SpecialCells(xlCellTypeFormulas, 23).Address(0, 0)

#009 End Select #010 End Sub

代码解析: