
Excel服务器客户端组件是在安装目录下的一个文件----ESClient.dll,它不是VBA程序,而是一个Com加载项,相当于对Excel附加了功能。Com载加项也是一种对象,我们可以在VBA程序中调用它提供的方法(编程接口)。
若要在VBA程序中调用Excel服务器的功能,首先需要声明对象,通过调用对象的方法来完成想要的功能,最后,还需要释放对象。
如下面的代码片断,第1行声明了一个变量对象oAdd,第2行设置该变量为Excel服务器客户端组件所对应的Com加载项。中间部分具体的操作,最后1行释放对象。
若要通过VBA程序操纵Excel服务器,开头的两行和最后的一行代码都是必需的,所不同的只是中间省略的部分。
Dim oAdd As Object
Set oAdd = Application.COMAddIns("ESClient.Connect").Object
…….
这里可以调用客户端组件的不同方法
…….
Set oAdd = Nothing
saveCase方法,作用是保存当前正在填报的表单。该方法有三个参数:
参数1:要省略
参数2:布尔型,是否省略保存对话框,默认值为False,也即显示保存对话框。
参数3:布尔型,是否询问继续填写下一张,默认值为True,也即询问是否填下一张。
返回值:布尔型,True表示保存成功,False表示保存失败
我们通常用Excel服务器填报完成一张表单后,需要手工点击【保存】工具栏按钮,或选择“文件à保存”菜单,才能保存。对于有大量表单需连续输入的情况,这种做法需要键盘和鼠标交替操作,效率不高。
我们可以通过在Worksheet_selectionChange事件处理程序中调用saveCase方法,使得录入员只需要操作键盘,当数据录入完成,光标跳转到最后一个数据项出,自动保存,出现新的表单等待输入,过程中不需要使用鼠标。
假设有如下的模版,定义三个数据项:x、y和录入时间,其中录入时间有默认值,x和y需要输入。
我们希望录入员的辅助动作次数最少:
输入x,按回车,输入y,按回车,保存成功,提示是否填下一张,按回车(相当于回答【是】),出现新的一张空白表,光标自动回到C2处。
输入一张单据的过程中辅助动作只有三次回车,没有鼠标动作。下面看一下实现方式。
在模版的设计状态下,打开Visual Basic编辑器,在Worksheet_selectionChange事件处理程序中输入如下代码:(为讲解方便,加上了行号)
| 1 | Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
| 2 | Dim oAdd As Object |
| 3 | Dim bResult As Boolean |
| 4 |
|
| 5 | Set oAdd = Application.COMAddIns("ESClient.Connect").Object |
| 6 |
|
| 7 | If Target.Address = "$C$4" Then |
| 8 | bResult = oAdd.saveCase(, True, True) |
| 9 | If bResult = False Then |
| 10 | MsgBox "保存失败!" |
| 11 | Else |
| 12 | Range("C2").Select |
| 13 | End If |
| 14 | End If |
| 15 |
|
| 16 | Set oAdd = Nothing |
| 17 | End Sub |
第1行,Worksheet_SelectionChange为事件处理程序名,它对应于单元区域被选中这一事件。这个事件处理程序有一个参数Target,它代表被选中的单元区域。
第2行,声明对象变量(必须这样写)
第5行,设置变量oAdd对应于Excel服务器客户端组件(必须这样写)
第7行,判断光标跳到的单元格是不是C4,如果不是,直接转到第16行(什么也没做)
第8行,(光标跳到了C4单元格),调用Excel服务器客户端组件提供的saveCase方法,实际保存当前已填好的表单,不弹出保存对话框,但保存后会询问是否继续填写。
第12行,(保存成功)光标跳转到C2处,等待继续输入。
第16行,释放对象(必须这样写)
本例在示例数据库中。
execQuery方式,作用是应用指定的表间公式,它只有一个参数,为字符串类型,其内容是一条或若干条表间公式的名称,若要执行的表间公式不止一条,彼此间需要用逗号分割(英文逗号)。
例如:
execQuery(“查询”),表示要执行当前模版上定义的表间公式“查询”
execQuery(“查询,统计”),表示要连续执行当前模版上定义的表间公式“查询”和“统计”。
复习第9章建立的“销售台帐”模板,我们定义了一个手动执行的表间公式“组合条件查询”。在模板上增加一个按钮,如图:
图 20‑5
在按钮的Click事件处理程序中写如下代码:
| 1 | Private Sub cmdQry_Click() |
| 2 | Dim oAdd As Object |
| 3 |
|
| 4 | Set oAdd = Application.COMAddIns("ESClient.Connect").Object |
| 5 |
|
| 6 | Range("C4").select |
| 7 | oAdd.execQuery ("组合条件查询") |
| 8 | |
| 9 | Set oAdd = Nothing |
| 10 | End Sub |
第2、4行,声明对象变量、赋值(必须这样写)
第6行,光标放置到明细表的第1行
第7行,执行表间公式
第9行,释放对象(必须这样写)