巨集 (VI) 資科系 林偉川 將資料暫存於表單中 ( 表單之標記說明屬性 ) 以 書籍訂單 資料表複製為 order 資料表, 並作出 order 單欄示式表單 將 order 資料表之訂單序號為 3,8,14, 17 做修改 於 order 表單設計檢視下, 加入一個命令按鈕名稱為 檢查並發送 e-mail 建立巨集 18 如下 : 2 1
巨集內容 3 巨集設定 Runmacros 巨集名稱為巨集 18. 檢查, 條件為 Not IsNull([ 訂單序號 ]) Sendobject 前之 msgbox 內容為 =[Forms]![order].[ 標記說明 ] Isnull([ 客戶名稱 ]) 之 setvalue 項目為 [Forms]![order].[ 標記說明 ], 運算式為 [Forms]![order].[ 標記說明 ] & Chr(13) & Chr(10) & " 訂單序號為 " & [Forms]![order]![ 訂單序號 ] & " 之 [ 客戶名稱 ] 為空白 " 4 2
範例畫面 5 使用查詢條件, 並將資料暫存於表單中 利用表單之標記說明屬性 以 書籍訂單 資料表複製為 order1 資料表, 並作出 order1 單欄示式表單 於 order1 表單設計檢視下, 加入一個命令按鈕名稱為 檢查日期檢查日期 Dcount( *, 資料表或查詢, 條件 )<>0 表示有符合此條件之資料 建立巨集 19 如下 : 6 3
巨集內容 7 其中巨集條件 : 巨集設定 DCount("*", order1","[forms]![order1]![ 日期 ]=#2001/4/20#")<>0 巨集指令 : Setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & " 訂單序號為 :" & [Forms]![order1].[ 訂單序號 ] & " 符合條件 " 8 4
執行範例 9 巨集條件函數 Dcount( *, 資料表或查詢, 條件 )<>0 表示有符合此條件之資料, 若傳回 0 則表示無符合條件之資料 DXXX( *, 資料表或查詢, 條件 ) ), 若傳回 Null, 則表示無符合條件之資料, 否則即做運算有下列指令 : 10 5
巨集條件函數 DSum( 數量, order1, [ 客戶名稱 ]= 風尚書店 ) 8 筆紀錄之總合 DAvg( 數量, order1, [ 客戶名稱 ]= 風尚書店 ) 8 筆紀錄之平均 DMin( 數量, order1, [ 客戶名稱 ]= 風尚書店 ) DMax( 數量, order1, [ 客戶名稱 ]= 風尚書店 ) DLookUp(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 ) 只找到符合條件之第一筆紀錄 11 巨集設定 找出符合條件之第一筆數量 巨集條件為 Not IsNull(DLookUp(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '")) 巨集指令 setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & " 找到第一筆客戶名稱為風尚書店之數量為 " & DLookUp(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '") 12 6
巨集設定 作出符合條件之數量數量總合 巨集條件為 Not IsNull(DSum(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '")) 巨集指令 setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & " 作出總合為 :" & DSum(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '") 13 巨集設定 作出符合條件之數量數量平均 巨集條件為 Not IsNull(DAvg(" 數量 ","order1 ","[ 客戶名稱 ]=' 風尚書店 '")) 巨集指令 setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & " 平均為 :" & DAvg(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '") 14 7
巨集設定 找出符合條件之數量最大值 巨集條件為 Not IsNull(DMax(" 數量 ","order1 ","[ 客戶名稱 ]=' 風尚書店 '")) 巨集指令 setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & 最大值為 : & DMax(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '") 15 巨集設定 找出符合條件之數量最小值 巨集條件為 Not IsNull(DMin(" 數量 ","order1","[ 客戶名稱 ]=' 風尚書店 '")) 巨集指令 setvalue 內容項目為 [Forms]![order1].[ 標記說明 ] 運算式為 [Forms]![order1].[ 標記說明 ] & Chr(13) & Chr(10) & 最小值為 : & DMin(" 數量 ", order1","[ 客戶名稱 ]=' 風尚書店 '") 16 8
巨集內容修改為 17 執行範例 18 9
巨集條件函數之使用 以 書籍訂單 資料表複製為 order1 資料表, 並作出 order2 單欄示表單 於 order2 表單, 拉出 7 個按鈕分別為 加總所有 平均所有 找到符合 找到最大 找到最小 找到第一筆 找到最後一筆 建立巨集 20 如下頁 19 巨集條件函數之使用 回到 order2 表單之 7 個按鈕分別按右鍵 / 屬性 / on_click 分別點選之 表單檢視測試之 其中 setvalue 之運算式為 DSum(" 數量 ","order1 ") Msgbox 之訊息為 =[Forms]![order1].[ 標記說明 ] 20 10
巨集條件函數說明 DSum(" 數量 ","order1") 加總所有數量之資料 DAvg(" 數量 ","order1") 平均所有數量之資料 Format(DAvg(" 數量 ","order1"),"00.00") 控制平均之顯示格式 DLookUp(" 書籍名稱 "," order1"," [ 客戶名稱 ]=' 好看書店 '") 找到符合此條件之資料的第一筆 21 巨集條件函數說明 DMax( 數量, order1 ) 找到全部資料中數量最大者 DMin(" 數量 ","order1") 找到最小者 DFirst(" 數量 ","order1") 找到第一筆記錄之數量 DLast(" 數量 ","order1") 找到最後一筆記錄之數量 22 11
巨集內容 23 執行範例 24 12
建立自動執行巨集 將巨集 9 複製成另一巨集 autoexec 將資料檔關閉後, 重新開啟測試之 巨集將自動執行 將資料檔關閉後, 重新開啟時加按 shift 測試之 不自動執行巨集 25 建立自動執行巨集 隱藏執行過程 將巨集 9 之內容前面加入 Hourglass 及 echo 之開啟回應選 否, 狀態列文字為 書籍訂單檢查中 執行過程隱藏但有文字顯示於狀態列 26 13
內建函數 Dmax 應用 自己做自動編號 以書籍訂單資料表, 複製成另一資料表 bookord 於 bookord 資料表之最後一筆記錄, 加入一筆新記錄, 刪除改筆記錄後, 再加入一筆新記錄時, 此記錄編號不能連續, 而產生跳號 為解決此問題, 於 bookord 資料表之設計檢視, 修改 訂單序號 欄位之資料類型為 數字 27 內建函數 Dmax 應用 自己做自動編號 以 bookord 資料表, 建立 bookord 單欄式表單, 於 bookord 表單之設計檢視, 於訂單序號訂單序號之資料欄按右鍵 / 屬性 / 資料修改其預設值為 =format(1+dmax( [ 訂單序號 ], [bookord] ),000) 其中 :DMax ( 欄名, 資料表或查詢 ) 找到最大者 bookord 表單檢視測試之, 加一筆新紀錄, 刪除後再新增一筆新紀錄 訂單序號之號碼不增加 28 14
執行範例 29 15