~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~
~ 聲明事項 ~
如各位想把以下本文章轉貼 , 請記得要注明出處.
本文章之內容為本人之經驗所寫, 絕無抄襲成份, 特此聲明.
由於圖片製作需時, 所以更新會比較慢.
存放圖片的 SHARE A PIC SERVER 可能讀取速度較慢, 請耐心等待.
第一次認識或者接觸到 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 留言:
Hi,威廉先生您好
我按照您的將初階教學的case逐一將程式碼分屬於3個module中,但是,有一個問題發生了。在"結束鈕"的部份,只有進入userform裡將程式碼加入"End"就可以結束對話框,但是我的問題是: 我填好Textbox中的資料後,我按了"記錄",結果excel裡沒有執行任何動作。而從第1回到第15回中,記得你沒有提到應該在"記錄"這個按鈕增加程式碼,如果這樣的話,在利用使用者介面記錄倉庫中的物件時,該怎麼藉由使用者介面記錄到Excel中呢?!
不好意思,問了很愚蠢的問題~
謝謝
alma 8/18
HI Alma ~
其實這個問題並不愚蠢啦 :) ( 可能是我之前都忘了寫 :P )
" 開始 " 這個按鈕是用來啟動其中一個按鈕的, 當然囉 ~ 就三個嘛 ~ 啟動那一個就留給你想一想了 ~ 當是練習吧 XD ~ ( 多漂亮的藉口 XDDD )
給你一個提示 , 嗯 ... 關於模組的啟動方法應該有說明過的 ... 嗯 ... 算了~ 忘了在那編文章內 XD 直接告訴你吧 ~ 啟動模組的方法是 : 模組名稱.模組 ( 例子 : Module1.ABC )
嗯嗯~ 很簡單吧 :) 不懂的可以來問哦~ 多交流才有進步 :)
Hi, William Sir
不好意思,上週公司休假跑去吳哥玩,玩回來之後發現你已經回了。
我試著將Module 先執行啟動,但是,命令列出現直行中斷,無法繼續執行。
我可以給你我的mail,然後您先寄封信給我,我可以把我的程式讓您看一下嗎?!
謝謝!!
alma
Sorry
my email address: almalin6@haitec.com.tw
alma
HI Alma ~
你把你遇到的問題直接貼出來就可以了 :) 等大家都可以一齊分享一齊研究嘛 :)
等你哦 ~ :)
也有相同的問題,請問威廉先生能告訴我該如何寫呢?
"模組名稱.模組 ( 例子 : 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 偉銘 ,
別客氣 ~ 幫到你就好 :)
有問題可以再問 , 如果我懂的都會盡力回答 :)
威廉先生 ~
Hi,威廉先生您好
所有程成式碼寫完試用,點選PI寫入產名數量按"記錄"卻發現B1出現OUT而不是PI,產名數量,出現在MR,OUT攔內,檢查程式碼沒有問題,是否點選PI VALUE=FALSE沒點的變成TURE問題會否在控制項的屬性還是其他
KENNY 2011/5/18
發佈留言