500 likes | 927 Views
使用 VBA. 何謂 VBA. VBA 的全名是 Visual Basic for Applications( 應用程式的 Visual Basic ), 它可以讓使用者在 Microsoft Office 中撰寫 Visual Basic 程式,使用簡單的語法來執行一些動作,讓使用者能夠更靈活地運用應用程式。. 進入 VBA 操作介面. 進入設計檢視模式下. 專案總管. 程式撰寫視窗. 物件屬性. 進入 VBA 操作介面. 如何輸入 Visual Basic 程式. 加入指令按鈕控制項. 輸入 MsgBox "hello" 程式碼. 執行結果.
E N D
使用VBA 何謂 VBA VBA的全名是Visual Basic for Applications(應用程式的Visual Basic),它可以讓使用者在Microsoft Office中撰寫Visual Basic程式,使用簡單的語法來執行一些動作,讓使用者能夠更靈活地運用應用程式。
進入VBA操作介面 進入設計檢視模式下
專案總管 程式撰寫視窗 物件屬性 進入VBA操作介面
如何輸入Visual Basic程式 加入指令按鈕控制項
輸入MsgBox "hello"程式碼 執行結果 如何輸入Visual Basic程式
如何活用Access 2000與VB資料庫存取 使用 Visual Basic 5.0 存取 Access 資料庫 先把Access 2000轉換成Access 97的版本後才能在VB5.0中使用
使用 Visual Basic 5.0 存取 Access 資料庫 進入VB 開啟一個標準執行檔
專案總管 屬性視窗 使用 Visual Basic 5.0 存取 Access 資料庫 表單 工具箱 VB5操作環境
使用 Visual Basic 5.0 存取 Access 資料庫 指定Data控制項的資料庫名稱 指定資料的來源是Data1控制項 指定資料表來源 選擇所要使用的欄位名稱
第一筆 上一筆 下一筆 最後一筆 使用 Visual Basic 5.0 存取 Access 資料庫
使用 Visual Basic 6.0 存取 Access 資料庫 進入VB 開啟一個標準執行檔
專案總管 屬性視窗 使用 Visual Basic 6.0 存取 Access 資料庫 表單 工具箱 VB6操作環境
開啟Adodc控制項的屬性頁 使用 Visual Basic 6.0 存取 Access 資料庫
第一筆 上一筆 下一筆 最後一筆 使用 Visual Basic 6.0 存取 Access 資料庫
例題二、Access與VBA的實例(臺灣技術創新調查問卷為例)例題二、Access與VBA的實例(臺灣技術創新調查問卷為例) • 資料庫建置 • 如同第二十八頁資料表格欄位設定方式,以Access軟體建置,新增所有資料表格後的畫面: 圖二(1)、資料表格建置完畢後的畫面
使用「資料庫關聯圖」,設定所有資料表格皆【強迫參考完整性】於基本資料,使用「資料庫關聯圖」,設定所有資料表格皆【強迫參考完整性】於基本資料, 以避免造成資料錯誤的情形發生。 圖二(2)、資料表格的關聯性
舉例來說,設定『基本資料』與『技術創新活動狀況二』的主索引鍵idno,並設定為一對一的舉例來說,設定『基本資料』與『技術創新活動狀況二』的主索引鍵idno,並設定為一對一的 【強迫參考完整性】。這樣一來,使用者在『技術創新活動狀況二』就無法新增『基本資料』 中沒出現過的idno編號;換而言之,不允許使用者新增不存在的記錄。如下圖: 圖二(3)、建立關聯性圖
如果在【技術創新活動狀況二】表單中隨便新增一筆記錄,則會出現【基本資料】如果在【技術創新活動狀況二】表單中隨便新增一筆記錄,則會出現【基本資料】 沒有相關資料存在,因此無法新增記錄的警告視窗。 圖二(4)、無法新增的警告視窗
系統操作與程式剖析 • 起始畫面:要求使用者輸入帳號及密碼 圖二(5)、系統主畫面
主選單畫面:系統功能選單,共有新增、查訓、刪除問卷資料;新增/查詢掃描圖檔、主選單畫面:系統功能選單,共有新增、查訓、刪除問卷資料;新增/查詢掃描圖檔、 簡易分析OLAP及匯出檔案六個功能。 圖二(6)、系統主選單
新增資料:進入後,可以對目前問卷資料做瀏覽、新增、查詢目前欄位內的資料。新增資料:進入後,可以對目前問卷資料做瀏覽、新增、查詢目前欄位內的資料。 圖二(7)、新增問卷畫面
由於問卷內容龐大,所以其他資料表格採取子畫面的新增形式,由於問卷內容龐大,所以其他資料表格採取子畫面的新增形式, 每個資料表格皆在此畫面同時做新增動作。 圖二(8)、新增問卷第二部分的子選單
這裡的【尋找記錄】按鍵是可以讓使用者對資料庫的特定欄位做字串搜索,例如針對公司名稱欄位,這裡的【尋找記錄】按鍵是可以讓使用者對資料庫的特定欄位做字串搜索,例如針對公司名稱欄位, 找尋有”味”字的公司,顯示找到的畫面如下圖呈現: 圖二(9)、尋找資料的查詢視窗
查詢資料: 這裡的查詢資料除了有上述的【尋找紀錄】功能外,還外加了【篩選記錄】的功能,讓使用人員能夠更快速地統計符合相關條件的所有公司名稱。由於Access功能有限,所以這裡使用了許多VBA程式來達到系統所要的需求。 以當時系統需求所訂,篩選條件有『調查方式』與『公司89年度人數』兩種。而『調查方式』可分為抽查和普查兩種;『公司89年度人數』則依19人以下、20~49人;50~99人;100~249人;250~499人及500人以上六種階度。 以下圖表示,篩選調查方式若選擇抽查方式,則瀏覽資料皆會以抽查的問卷資料為主,即上、下一筆資料及尋找資料等功能都只能查詢到抽查的問卷資料,普查的資料將被剔除。反之,選擇普查方式也是如此。
若是選擇篩選89年度人數,則是依人數層級分類,篩選後畫面如下,以20~49人條件篩選:若是選擇篩選89年度人數,則是依人數層級分類,篩選後畫面如下,以20~49人條件篩選: 圖二(11)、篩選是以”20~49人”公司人數的問卷資料
若選擇【複合式篩選條件】,則是依兩種條件共同篩選,如同時以抽查的調查方式若選擇【複合式篩選條件】,則是依兩種條件共同篩選,如同時以抽查的調查方式 和20~49人的公司人數做篩選,如下圖: 圖二(12)、複合式篩選條件
【還原篩選前紀錄】按鈕是將目前的篩選條件取消,還原所有問卷資料皆可瀏覽的條件下。【還原篩選前紀錄】按鈕是將目前的篩選條件取消,還原所有問卷資料皆可瀏覽的條件下。 由於上述幾個功能皆使用VBA程式撰寫,這裡針對這些程式做些說明。 篩選調查方式的VBA原始碼: ================================================================== Private Sub Combo267_AfterUpdate() ‘當按鈕內容改變時,執行此程序 Dim str ‘ str變數是儲存 篩選的字串 If [Combo267] = "抽查" Then str = "method=1" ‘調查方式的欄位名稱是method,代表抽查 Else str = "method=0" ‘代表普查 End If If [Check280] <> 0 Then ‘如果使用者有按下複合式篩選鈕 Select Case [Combo270] ‘89年度公司人數欄位為a5_2 Case "19人以下": str = str + " and a5_2 < 20" ‘將字串加入人數條件 Case "20~49人": str = str + " and a5_2 > 19 and a5_2 <50" Case "50~99人": str = str + " and a5_2 > 49 and a5_2 < 100" Case "100~249人": str = str + " and a5_2 > 99 and a5_2 < 250" Case "250人~499人": str = str + " and a5_2 > 249 and a5_2 < 500" Case "500人以上": str = str + " and a5_2 > 499" End Select End If Me.Filter = str ‘把篩選條件字串給予物件屬性 Me.FilterOn = True ‘執行篩選 End Sub
篩選89年度公司人數方式的VBA原始碼: Private Sub Combo270_AfterUpdate() Dim str Select Case [Combo270] ‘篩選89年度公司人數條件 Case "19人以下": str = "a5_2 < 20" Case "20~49人": str = "a5_2 > 19 and a5_2 <50" Case "50~99人": str = "a5_2 > 49 and a5_2 < 100" Case "100~249人": str = "a5_2 > 99 and a5_2 < 250" Case "250人~499人": str = "a5_2 > 249 and a5_2 < 500" Case "500人以上": str = "a5_2 > 499" End Select If [Check280] <> 0 Then ‘如果使用者有按下複合式篩選鈕 If [Combo267] = "抽查" Then ‘將字串加入調查方式條件 str = str + "and method=1" Else str = str + "and method=0" End If End If Me.Filter = str ‘把篩選條件字串給予物件屬性 Me.FilterOn = True ‘執行篩選 End Sub
還原篩選前紀錄的VBA原始碼: Private Sub Command269_Click() Me.FilterOn = False ‘不執行篩選 End Sub 新增資料判斷完整性的VBA程式碼: 如在新增過程中,輸入調查方式(抽查、普查)時,並未符合樣本編號的編碼模式時,會顯示訊息警告之。 Private Sub Option229_GotFocus() If Left([idno], 1) <> "M" And Left([idno], 1) <> "S" Then MsgBox ("注意! 若此樣本為<抽查>則樣本編號應為 M、S 字母開頭," & Chr(13) & "請重新檢查樣本編號及Key號是否輸入正確!") End If End Sub Private Sub Option231_GotFocus() If Left([idno], 1) <> "B" Then MsgBox ("注意! 若此樣本為<普查>則樣本編號應為 B 字母開頭," & Chr(13) & "請重新檢查樣本編號及Key號是否輸入正確!") End If End Sub
例如統一企業公司的調查方式為普查,若要強制改變其調查方式為抽查的話,例如統一企業公司的調查方式為普查,若要強制改變其調查方式為抽查的話, 系統會顯示警告訊息: 圖二(13)、判斷資料完整性的情形
刪除資料:基於安全性的考量,在執行此功能後,會要求使用者輸入欲刪除的樣本編號。刪除資料:基於安全性的考量,在執行此功能後,會要求使用者輸入欲刪除的樣本編號。 若輸入錯誤,將顯示Record not found,並回到主選單畫面。 圖二(14)、輸入樣本編號視窗 圖二(15)、搜尋不到紀錄的視窗 若要輸入正確,則會跳出此筆記錄,使用者才能選擇刪除。 圖二(16)、輸入問卷的樣本編號
新增/查詢掃描圖檔:此部份作為新增、查詢、刪除掃描圖檔用途,掃描圖檔是紀錄新增/查詢掃描圖檔:此部份作為新增、查詢、刪除掃描圖檔用途,掃描圖檔是紀錄 此問卷的原始Scan後的檔案,以便日後查證對照用。 圖二(18)、掃描圖檔畫面
【新增紀錄】功能按鈕,按下後會要求使用者輸入欲新增掃描檔的問卷樣本編號。輸入【新增紀錄】功能按鈕,按下後會要求使用者輸入欲新增掃描檔的問卷樣本編號。輸入 後,系統會搜尋在【基本資料】資料表格中是否有此編號的問卷?若沒有,則出現找不 到此編號的問卷資料。如下圖: 圖二(19)、要求鍵入掃描檔的樣本編號 圖二(20)、找不到紀錄的視窗
若有,則出現視訊窗詢問使用者是否確定是要新增此家公司的掃描檔資料。如下圖:若有,則出現視訊窗詢問使用者是否確定是要新增此家公司的掃描檔資料。如下圖: 圖二(21)、輸入樣本編號 圖二(22)、確認是否新增此筆問卷的掃描檔
按下【是】後,將自動帶入樣本編號及key號,並可新增掃描圖檔的路徑。按下【是】後,將自動帶入樣本編號及key號,並可新增掃描圖檔的路徑。 圖二(23)、自動帶入樣本編號及key號
新增記錄的VBA原始碼: Private Sub Command17_Click() On Error GoTo Err_Command17_Click Dim SQLStr num = InputBox("請輸入要鍵入掃描檔的樣本編號", "樣本編號") ‘*註解 要求使用者輸入樣本編號 If num <> "" Then Set rs = New ADODB.Recordset ‘*註解 使用ADO物件 SQLStr = "select * from 基本資料 where idno ='" + num + "'" ‘*註解 組織SQL查詢字串,找尋此樣本編號的記錄 rs.Open SQLStr, CurrentProject.Connection, adOpenKeyset, adLockOptimistic ‘*註解 開啟ADO連結 並執行SQL指令 If Not rs.EOF Then ‘*註解 判斷是否有找到此記錄 choice = MsgBox("您選擇是要鍵入:" & Chr(10) & rs.Fields("comp") & Chr(10) & "樣本編號:" + rs.Fields("idno") & Chr(10) & "Key號:" + rs.Fields("keyno") & Chr(10) & "是嗎?", 4) ‘* 註解 顯示此筆記錄的內容,要求使用者回應正確與否 If choice = vbYes Then DoCmd.GoToRecord , , acNewRec idno = rs.Fields("idno") keyno = rs.Fields("keyno") ‘* 註解 將樣本編號及key號帶入表單 End If Else MsgBox ("很抱歉,你輸入的樣本編號在資料庫中並不存在") ‘* 註解 顯示搜尋不到記錄的訊息 End If End If Exit_Command17_Click: Exit Sub Err_Command17_Click: MsgBox Err.Description Resume Exit_Command17_Click End Sub
簡易分析:此功能可連結Excel軟體,並開啟檔案(C:\Tis\Olap.xls)。此檔案以連結資料庫方式,簡易分析:此功能可連結Excel軟體,並開啟檔案(C:\Tis\Olap.xls)。此檔案以連結資料庫方式, 針對某幾個欄位做樞紐分析表、樞紐分析圖。以下兩個圖例分為依公司名稱與89年人數、抽查 方式與公司89年人數做簡易分析的結果。 圖二(24)、依公司名稱與89年人數做樞紐分析
圖二(25)、對抽查方式與公司89年人數做樞紐分析圖二(25)、對抽查方式與公司89年人數做樞紐分析
匯出資料:此功能可將目前問卷資料內容匯出成Excel檔案。匯出資料:此功能可將目前問卷資料內容匯出成Excel檔案。 圖二(26)、資料匯出主畫面
VBA應用範例 <Excel與VBA的實例說明:ANOVA表建立 > 以一般使用者而言,若要處理數據方面的計算,習慣上還是喜歡使用Excel軟體完成。不論是使用巨集或VBA來製作計算程式,本質上都是屬於Visual Basic的語法應用。舉例說明,可以已建立的數據做出ANOVA分析,主畫面如下:
VBA應用範例 <Excel與VBA的實例說明:ANOVA表建立 > 選取【工具】底下的【巨集】,並開啟【anova】編輯
VBA應用範例 <Excel與VBA的實例說明:ANOVA表建立 > (執行結果如下)
VBA應用範例 <Excel與VBA的實例說明:ANOVA表建立 >