2008年8月1日星期五

Part16 - VBA 學習第十五回 - 小結和溫馨提示 ( 繁體 )

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~

~ 聲明事項 ~

如各位想把以下本文章轉貼 , 請記得要注明出處.

本文章之內容為本人之經驗所寫, 絕無抄襲成份, 特此聲明.

由於圖片製作需時, 所以更新會比較慢.

存放圖片的 SHARE A PIC SERVER 可能讀取速度較慢, 請耐心等待.

Picture


第一次認識或者接觸到 VBA 這個東西的時候 , 你可能還在懷疑到底我們可以做到什麼 , 現在 , 經過這短短的十幾堂課 , 你就已經做到了第一個程式了 , 而且功能還不錯嘛 ~ 呵呵 ~ 可能你會覺得很棒呢 ~ 更有可能你已經在動手做另一個新的程式了 .

現在要告訴你的 , 一些 EXCEL - VBA 使用時 , 經常會碰到的問題 .

1. ) 程式碼太長 , 電腦說 " 我不跑了 ! "

這個問題在初期學習的時候最常發生了 , 因為大部份人都會把所有的功能一次過寫在同一個地方內 , 我所指的是在報表上加一個按鈕 , 把程式碼都加到那個按鈕中 , 並沒有分開模組 , 當程式碼有上百句的時候 , 你的電腦就會撒嬌了哦 ~ 哈哈 ~ 只要分開模組來編寫 , 設計時要想好 " 當使用者按下這個按鈕 , 就執行這個模組的 XXX , 之後到 XXX , 再到 XXX " 問題就搞定了 ~

2. ) 程式功能很多 , 但是跑得很慢 .

程式跑得很慢的主要原因 , 大多數都是因為程式碼太長 , 或者你使用了 " 使用者介面 " . 以前我編寫程式的時候 , 都很喜歡搞一搞那個使用者介面的 , 感覺上來說是蠻利害的嘛 , 但是到了後來 , 我發現程式越跑越慢 , 慢得有點不能接受 , 不不不 , 不是有點 , 是大部份情況都不能接受 , 但是當我刪掉了使用者介面這個東西之後 , 情況就立即得到改善了 . 當然 , 如果像我們之前做的那個 , 那麼簡單的使用者介面 , 是不會出現這樣的情況的 , 我所指的是十分多功能的使用者介面 .

3. ) 程式碼很少很短 , 但都跑得很慢 .

嘿嘿嘿 ~ 不要忘記一個重點哦 ~ 我們現在學習使用的是一個寄生在 EXCEL 報表內的東西哦 ~ 當報表的資料越來越多 , 報表的容量大了 , 自然就會跑得越來越慢了 . 程式碼太多也會使報表的容量變大 , 太大的話打開報表都有困難了 , 都別說要跑程式 .

4. ) 程式執行時發生錯誤 , 導致程式中斷 .

原因有很多 , 包括打錯了程式碼 , 或者迴圈設定變成了無限次循環 , 當中最常見的 , 是使用者輸入的東西錯誤 , 當你編寫 EXCEL - VBA 的經驗一天比一天多的時候 , 程式出錯的機會是很少的 ( 當然 , 你必須要善用偵錯的功能 ), 但當使用者輸入的東西跟我們的設定有所不同的時候 , 程式錯誤就很難避免了 . 所以必須要跟使用者強調 , 那一個要輸入數字 , 那一個要輸入什麼 .

5. ) 無限循環 .

這個嘛 ... 嗯 ... 很難跟你解釋的清楚 , 當你的程式需要用到很多判斷的時候 , 比如 Do ~ Loop ~ Until , 在設定的期間一定要小心點 , 因為當程式出現無限循環時 , 電腦是不會告訴你的 , 你只會感覺到電腦好像當機了 . 所以當你在使用循環來做判斷的時候 , 最後就是用偵錯功能多測試幾次 , 否則當你正式嘗試一次跑完程式時 , 無限循環發生了 , 電腦當機了 , 忘了儲存 ... 重新再寫 ... 又感到有點暈了 ...

一點點的溫馨提示 :

1. ) 善用偵錯功能 , 正式測試前要先偵錯 , 一句一句的慢慢看著它跑 . ( 除非你相信你的程式碼一個錯誤都沒有 :) )

2. ) 不要在 EXCEL - VBA 加入太多的使用者介面 , 否則檔案會很大 . 如果是因為這樣而導致程式跑得慢 , 請刪去不必要的使用者介面 .

3. ) 程式碼要分開放在不同的模組內 , 一是為了方便管理 , 二是為了不要給電腦撒嬌的機會 XD

4. ) 編寫程式時記得加入註解 .

5. ) 記得要儲存 !! ( 如果你不想有什麼問題發生的時候 , 所有東西都要重做 , 就要記得儲存嚕 ~ )

====================================

好 ~ 分享了那麼多 , 現在就等你自己慢慢地鑽研一下吧 ~ 下一次 , 將會推出一個新的系列 , 名字還沒想好 XD 記得要想我哦 ~ 我很快就會回來了 :)

12 留言:

Alma 說...

Hi,威廉先生您好
我按照您的將初階教學的case逐一將程式碼分屬於3個module中,但是,有一個問題發生了。在"結束鈕"的部份,只有進入userform裡將程式碼加入"End"就可以結束對話框,但是我的問題是: 我填好Textbox中的資料後,我按了"記錄",結果excel裡沒有執行任何動作。而從第1回到第15回中,記得你沒有提到應該在"記錄"這個按鈕增加程式碼,如果這樣的話,在利用使用者介面記錄倉庫中的物件時,該怎麼藉由使用者介面記錄到Excel中呢?!

不好意思,問了很愚蠢的問題~
謝謝
alma 8/18

威廉先生 說...

HI Alma ~

其實這個問題並不愚蠢啦 :) ( 可能是我之前都忘了寫 :P )

" 開始 " 這個按鈕是用來啟動其中一個按鈕的, 當然囉 ~ 就三個嘛 ~ 啟動那一個就留給你想一想了 ~ 當是練習吧 XD ~ ( 多漂亮的藉口 XDDD )

給你一個提示 , 嗯 ... 關於模組的啟動方法應該有說明過的 ... 嗯 ... 算了~ 忘了在那編文章內 XD 直接告訴你吧 ~ 啟動模組的方法是 : 模組名稱.模組 ( 例子 : Module1.ABC )

嗯嗯~ 很簡單吧 :) 不懂的可以來問哦~ 多交流才有進步 :)

Alma 說...

Hi, William Sir
不好意思,上週公司休假跑去吳哥玩,玩回來之後發現你已經回了。
我試著將Module 先執行啟動,但是,命令列出現直行中斷,無法繼續執行。

我可以給你我的mail,然後您先寄封信給我,我可以把我的程式讓您看一下嗎?!

謝謝!!

alma

Alma 說...

Sorry
my email address: almalin6@haitec.com.tw

alma

威廉先生 說...

HI Alma ~

你把你遇到的問題直接貼出來就可以了 :) 等大家都可以一齊分享一齊研究嘛 :)

等你哦 ~ :)

Yan123 說...

也有相同的問題,請問威廉先生能告訴我該如何寫呢?
"模組名稱.模組 ( 例子 : Module1.ABC )"
是不是說我雙按"記錄",然後在裡面寫:
Private Sub CommandButton1_Click()

DataEntry.Entry

End Sub

還是我錯了?

那麼其他的OptionButton 1-3(PI RM OUT)還有Textbotton 1,2(產品,數量)需要打code去啟動它嗎?

威廉先生 說...

Hi Yan ,

"記錄" 按鈕內的程式碼如你所寫的加進去就可以了 , 不過你必需要先確認一件事, DataEntry.Entry 中的 DataEntry 是模組名稱 , 必需要跟你本身在增加的模組時所設定的名稱一樣 , 否則程式會出錯哦 ~

關於 OPTION BUTTON 1 - 3 和 TEXT BOX 1 - 2 這裡面都不用增加程式碼 , 除非你希望使用者只能在指定的 TEXT BOX 當中只能輸入英文或數字 , 才會在 TEXT BOX 內加入程式碼 , 其他的情況下 , 只要利用按鈕啟動模組 , 用模組控制其他物件就可以了 . :)

偉銘 說...

Private Sub CommandButton1_Click()
NewReport.FirstRecord
End Sub

寫入NewReport,順利輸入第一筆資料,但我該怎麼寫入另一個AddRecord呢?

威廉先生 說...

Hi 偉銘 ,

你所指的加入另一個 AddRecord 如果是指這個 " 初階教學 " 編的話 , 你只要想一下 , 怎樣找到最後一個記錄就可以了 , 比如說 , 你的程式幫你輸入了第一個記錄 , 之後你又要再輸入一個新記錄 , 在記錄到報表內之前 , 你要叫你的電腦 , 把最後一個記錄找出來 , 用的指令是 END(XLDOWN) . 找到了再加入新記錄就可以了 . 以下是一個 END(XLDOWN) 的使用方法 ~

Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A1").Select
ActiveCell.End(xlDown).Select

這就可以找到最後一個記錄出來 , 然後利用變量記錄下來再好好利用 , 這樣就可以做到記錄新資料的功能了 ~

有不明白的可以再問 , 我會盡能力幫你 :)

偉銘 說...

大大:
搞定了,原來是我把
Private Sub CommandButton1_Click()
DataEntry.entry
End Sub
寫成
Private Sub CommandButton1_Click()
NewReport.FirstRecord
End Sub
所以都一直寫入B2。
感謝

威廉先生 說...

Hi 偉銘 ,

別客氣 ~ 幫到你就好 :)
有問題可以再問 , 如果我懂的都會盡力回答 :)

威廉先生 ~

Unknown 說...

Hi,威廉先生您好
所有程成式碼寫完試用,點選PI寫入產名數量按"記錄"卻發現B1出現OUT而不是PI,產名數量,出現在MR,OUT攔內,檢查程式碼沒有問題,是否點選PI VALUE=FALSE沒點的變成TURE問題會否在控制項的屬性還是其他
KENNY 2011/5/18

最新回應

Loading...

有事啟奏‧無事閒聊 ~ 哈 ~


米高積遜全復刻 哈利波特 Michael Jackson 妙麗 金曲獎 MJ 迈克尔杰克逊其实没有死!美国CBC电台已证实 哈利波特 hongkong168 蓮花河畔景苑 盧廣仲 鄧麗欣 不想放手New! 陳珊妮 方大同 巨乳排球 痞子英雄 23 東風 蕭閎仁 米高積遜全復刻 上海 倒塌 南王姐妹花 周杰倫 變形金剛2下載 michael jackson 去世 天文台 米高積遜 花拉科茜 天圖佈局 浪卡 耳廓狐 神探俏嬌娃 韶关旭日玩具厂 譚曉風 严妍 僧老少閒 地下天文台 金泰浩 百老匯 巨乳排球 陳振聰 柯柏文 aika 麥可傑克森