20.2 Excel伺服器VBA編程介面

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

…….

       這堨i以調用用戶端元件的不同方法

…….

Set oAdd = Nothing

20.2.1 自動保存、連續輸入

方法說明

saveCase方法,作用是保存當前正在填報的表單。該方法有三個參數:

參數1:要省略

參數2:布林型,是否省略保存對話方塊,預設值為False,也即顯示保存對話方塊。

參數3:布林型,是否詢問繼續填寫下一張,預設值為True,也即詢問是否填下一張。

返回值:布林型,True表示保存成功,False表示保存失敗

示例

我們通常用Excel伺服器填報完成一張表單後,需要手工點擊【保存】工具欄按鈕,或選擇“檔à保存”菜單,才能保存。對於有大量表單需連續輸入的情況,這種做法需要鍵盤和滑鼠交替操作,效率不高。

我們可以通過在Worksheet_selectionChange事件處理程式中調用saveCase方法,使得錄入員只需要操作鍵盤,當資料錄入完成,游標跳轉到最後一個資料項目出,自動保存,出現新的表單等待輸入,過程中不需要使用滑鼠。

假設有如下的模版,定義三個資料項目:xy和錄入時間,其中錄入時間有預設值,xy需要輸入。

我們希望錄入員的輔助動作次數最少:

輸入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行,釋放物件(必須這樣寫)

本例在示例資料庫中。

20.2.2 用按鈕執行表間公式

方法

execQuery方式,作用是應用指定的表間公式,它只有一個參數,為字串類型,其內容是一條或若干條表間公式的名稱,若要執行的表間公式不止一條,彼此間需要用逗號分割(英文逗號)。

例如:

execQuery(“查詢”),表示要執行當前模版上定義的表間公式“查詢”

       execQuery(“查詢,統計”),表示要連續執行當前模版上定義的表間公式“查詢”和“統計”。

示例

復習第9章建立的“銷售台帳”範本,我們定義了一個手動執行的表間公式“組合條件查詢”。在範本上增加一個按鈕,如圖:

205

在按鈕的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

 

24行,聲明物件變數、賦值(必須這樣寫)

6行,游標放置到明細表的第1

7行,執行表間公式

9行,釋放物件(必須這樣寫)