昱得資訊工作室
麻辣學園
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?
2009-01-07, 07:34:08
世界展望會助學計劃
首頁 說明 登入 註冊 贊助論壇 想當作者?
新聞: 請會員來訪時務必完成登入,為維護論壇品質,將不定期刪除長時間未登入的會員!!


+  麻辣家族討論區
|-+  MS Office 系列
| |-+  EXCEL
| | |-+  Excel程式區 (版主: hsieh)
| | | |-+  事件/巨集/表單 - 認識與簡介
0 會員 以及 1 訪客 正在閱讀本篇主題. « 上一篇主題 下一篇主題 »
頁: [1] 向下 列印
作者 主題: 事件/巨集/表單 - 認識與簡介  (閱讀 4643 次)
leonchou
論壇維護群
*
離線 離線

文章: 1204


事件/巨集/表單 - 認識與簡介
« 於: 2005-04-19, 12:09:35 »

(一) 事件、一般巨集、自訂按鈕:功能的區別? 使用時機?
(二) 巨集的使用,除了該 3 項之外還有哪些?

1.事件(Event):想要隨著活頁簿或工作表的操作(包含開、關檔案,
 切換活頁簿或工作表,選取或輸入儲存格...等等)而「自動」執行的,
 就可使用「事件」;除此之外則使用一般巨集。
 自訂按鈕通常搭配一般巨集使用。一般巨集需要一個執行的動作,
 而自訂按鈕就是執行巨集的媒介之一。這表示除了自訂按鈕外,
 其他凡是可以「指定巨集」的物件(例如圖片、繪圖物件...等等)
 也都可以達到同樣的目的。

2.除了事件和一般巨集之外... 我想較常見的就是自訂表單了吧。
 自訂表單(UserForm)是一個視窗或對話方塊,其外觀和其中的
 控制項(如下拉清單和按鈕等等)可自行設計,並撰寫相關的
 程式去控制它,如此可做出符合個人需求的操作介面。
 
 參考 - UserForm的基本概念和技巧
已記錄

leonchou
論壇維護群
*
離線 離線

文章: 1204


活頁簿事件範例 - Workbook_Open
« 回覆文章 #1 於: 2005-04-19, 12:10:39 »

活頁簿事件範例 - Workbook_Open

問:我要怎樣讓我所寫的巨集在活頁簿開啟的同時就可以自動執行了?

使用 Workbook_Open 事件,可讓活頁簿開啟時自動執行。
按 Alt-F11 開啟VB編輯器,把程式放在 ThisWorkbook 模組,如圖。


已記錄

leonchou
論壇維護群
*
離線 離線

文章: 1204


工作表事件範例 - Worksheet_Change
« 回覆文章 #2 於: 2005-04-19, 12:11:42 »

問:我在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


工作表事件 - 一些使用技巧
« 回覆文章 #3 於: 2005-04-19, 12:15:49 »

認識 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


EnableEvents 屬性的應用
« 回覆文章 #4 於: 2005-04-19, 12:44:35 »

當使用並觸發 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


Re: 事件/巨集/表單 - 認識與簡介
« 回覆文章 #5 於: 2005-04-21, 22:56:17 »

leonchou 大大:
    請詳述 Worksheet_Change,Worksheet_SelectionChange兩者的差別及各使用時機,謝謝!
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4679


Re: 事件/巨集/表單 - 認識與簡介
« 回覆文章 #6 於: 2005-04-21, 23:30:25 »

leonchou 兄真是辛苦,小弟以不成熟的觀點認為,Worksheet_SelectionChange事件:是你要在點選指定範圍或儲存格時要執行時使用,如
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target = "a"
End Sub
這樣會在點選的儲存格輸入"a"
Worksheet_Change事件則會在指定的儲存格或範圍完成動作按下enter後執行,這個應該是用的最多的工作表事件。
已記錄

結廬待慧君
u110686
中學生
*
離線 離線

文章: 24


Re: 事件/巨集/表單 - 認識與簡介
« 回覆文章 #7 於: 2005-04-21, 23:59:47 »

謝謝 oobird兄說明,恕小弟不才,
Worksheet_SelectionChange事件是點按儲存格即觸發;
Worksheet_Change事件是輸入完才觸發!對嗎?


引用自: leonchou
You got it ! Afro

也謝謝 bird兄幫我解釋~

« 最後編輯時間: 2005-04-22, 01:21:24 由 leonchou » 已記錄
頁: [1] 向上 列印 
« 上一篇主題 下一篇主題 »
自訂搜尋
跳到:  

本頁花了 0.324 秒, 以及 20 次的資料庫查詢.