頁: [1]
|
 |
|
作者
|
主題: 事件/巨集/表單 - 認識與簡介 (閱讀 4643 次)
|
leonchou
論壇維護群
離線
文章: 1204
|
(一) 事件、一般巨集、自訂按鈕:功能的區別? 使用時機? (二) 巨集的使用,除了該 3 項之外還有哪些? 1.事件(Event):想要隨著活頁簿或工作表的操作(包含開、關檔案, 切換活頁簿或工作表,選取或輸入儲存格...等等)而「自動」執行的, 就可使用「事件」;除此之外則使用一般巨集。 自訂按鈕通常搭配一般巨集使用。一般巨集需要一個執行的動作, 而自訂按鈕就是執行巨集的媒介之一。這表示除了自訂按鈕外, 其他凡是可以「指定巨集」的物件(例如圖片、繪圖物件...等等) 也都可以達到同樣的目的。 2.除了事件和一般巨集之外... 我想較常見的就是自訂表單了吧。 自訂表單(UserForm)是一個視窗或對話方塊,其外觀和其中的 控制項(如下拉清單和按鈕等等)可自行設計,並撰寫相關的 程式去控制它,如此可做出符合個人需求的操作介面。 參考 - UserForm的基本概念和技巧
|
|
|
|
|
已記錄
|
|
|
|
leonchou
論壇維護群
離線
文章: 1204
|
活頁簿事件範例 - Workbook_Open 問:我要怎樣讓我所寫的巨集在活頁簿開啟的同時就可以自動執行了? 使用 Workbook_Open 事件,可讓活頁簿開啟時自動執行。 按 Alt-F11 開啟VB編輯器,把程式放在 ThisWorkbook 模組,如圖。 
|
|
|
|
|
已記錄
|
|
|
|
leonchou
論壇維護群
離線
文章: 1204
|
問:我在A1儲存格輸入數字後,要使它自動減掉B1的數字? 使用 Worksheet_Change 事件,可讓儲存格有變動時自動執行程式。 在工作表標籤標按右鍵 > 檢視程式碼,如圖。 把程式放在工作表 (Worksheet) 模組空白處。  使用名為 Worksheet_Change 的巨集, 例 -- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub '限制為A1儲存格才起作用Application.EnableEvents = False Target.Value = Target - [B1] Application.EnableEvents = True End Sub
|
|
|
|
|
已記錄
|
|
|
|
leonchou
論壇維護群
離線
文章: 1204
|
認識 Target 物件變數
使用工作表事件Change或SelectionChange時,會自動帶進來一個 Target 變數。 Target 代表事件作用的儲存格或儲存格範圍,例如 Worksheet_Change事件: 變更了 A1,Target 就是 A1 儲存格。 Worksheet_SelectionChange事件: 選取 A1:C10,Target 就是 A1:C10 儲存格。
Target 變數是 Range (儲存格範圍) 物件,你可以在事件的程式中以 Target 物件變數來存取作用儲存格的屬性,例如以 Target.Address 取得作用儲存格位址的字串。
限制工作表事件作用範圍的幾種寫法
有時我們會希望工作表事件只針對特定的欄/列或儲存格範圍,所以可在事件一開始就進行判斷。 幾種寫法可視需要擇一或搭配運用 -- If Target.Address <> "$A$1" Then Exit Sub '限制為A1儲存格才起作用 If Target.Row > 1 Then Exit Sub '限制為第1列才起作用 If Target.Column > 1 Then Exit Sub '限制為A欄(第1欄)才起作用 If Target.Count > 1 Then Exit Sub '限制為單一儲存格才起作用 If Not Target.Address Like "$[CGX]$*" Then Exit Sub '限制為C,G,X欄才起作用 If Application.Intersect(Target, [A1:C10]) Is Nothing Then Exit Sub '限制為A1:C10範圍內才起作用
|
|
|
|
« 最後編輯時間: 2005-04-19, 18:05:58 由 leonchou »
|
已記錄
|
|
|
|
leonchou
論壇維護群
離線
文章: 1204
|
當使用並觸發 Worksheet_Change,程式中指定儲存格的值時又再次觸發 Worksheet_Change,如此反復造成循環,程式無法結束,造成假性當機的現象。 雖然 Excel 會有循環次數的限制,還是會停下來,但這終究算是一個不良程式。 有時你奇怪為何一個事件沒什麼內容卻執行很久,就要小心這個問題。
爲避免這個情形,程式中我們會在指定儲存格值之前加上這一句: Application.EnableEvents = False 目的是使以下的動作不再觸發 Worksheet_Change 事件。 但切記最後再將它復原,以使 Change 或其他事件能再次作用: Application.EnableEvents = True
例如: Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False For I = 1 To 10 ....... Cells(Target.Row, I + 29) = …… Next I Application.EnableEvents = True End Sub
如此即可避免「事件循環」的問題。
|
|
|
|
|
已記錄
|
|
|
|
u110686
中學生
離線
文章: 24
|
leonchou 大大: 請詳述 Worksheet_Change,Worksheet_SelectionChange兩者的差別及各使用時機,謝謝!
|
|
|
|
|
已記錄
|
|
|
|
oobird
凸槌的木工
論壇維護群
離線
文章: 4679
|
leonchou 兄真是辛苦,小弟以不成熟的觀點認為,Worksheet_SelectionChange事件:是你要在點選指定範圍或儲存格時要執行時使用,如 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target = "a" End Sub 這樣會在點選的儲存格輸入"a" Worksheet_Change事件則會在指定的儲存格或範圍完成動作按下enter後執行,這個應該是用的最多的工作表事件。
|
|
|
|
|
已記錄
|
結廬待慧君
|
|
|
u110686
中學生
離線
文章: 24
|
謝謝 oobird兄說明,恕小弟不才, Worksheet_SelectionChange事件是點按儲存格即觸發; Worksheet_Change事件是輸入完才觸發!對嗎? You got it ! 
也謝謝 bird兄幫我解釋~
|
|
|
|
« 最後編輯時間: 2005-04-22, 01:21:24 由 leonchou »
|
已記錄
|
|
|
|
|
頁: [1]
|
|
|
|