顯示包含「02. EXCEL VBA 教學 (初學級) - 繁體」標籤的文章。顯示所有文章
顯示包含「02. EXCEL VBA 教學 (初學級) - 繁體」標籤的文章。顯示所有文章

2008年8月1日星期五

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

| 12 留言 |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 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 記得要想我哦 ~ 我很快就會回來了 :)

2008年7月31日星期四

Part15 - VBA 學習第十四回 - 不同的解決方法 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


呵呵呵 ~ 你好嗎 ~ 頭有痛嗎 ~ 哈哈 ~ 又來到給你答案的時候了哦 ~ 看好了 ~


( Pic15_1 )

如果你想出了上面的一堆程式碼 , 就足以證明你真的用心嘗試過了 , 不過我想跟你說 , 有時候 , 在我們編寫程式時所遇到的問題 , 解決方法不一定只有一個的 , 我們應該要向著小一點的程式碼來想 , 如果想出了一個成功解決問題而且程式碼比較少的 , 我們都應該要採用 , 因為這樣才可以加快程式的運作時間 , 如果你的程式功能很龐大而且複雜 , 你就更加要想出一切可能的方法 , 選一個最好的 .


( Pic15_2 )

正如上面程式碼 , 這是有同樣功能但是只需要一句程式碼的解決方法 , 先解釋一下 , Worksheets("Sheet1").Range(Cells(LastRec + 1, 1), Cells(LastRec + 1, 11)).Value = "" 這句程式碼內 , Range 的部份很奇怪吧 , 為什麼會有 Cells 這個字的 , 其實 Cells 就是指儲存格了 , Cells(LastRec + 1, 1) LastRec + 1 就是我們要的列 , 後面的 1 是指行 "A" , 如果是 2 的話就是指行 "B" 了 , 嘿嘿嘿 ~ 很有趣吧 ~ 哈哈 ~ 一句程式碼就可以代替了十多句的程式碼哦 ~

你一定要記住 , 當你所認識到的指命越來越多的時候 , 你就一定要學會變通 , 使用最少的程式碼來做最多的事情 , 這樣你的程式就一定可以跑得更快 , 使用者還會送你一句 " 利害 ~ " 哈哈哈 ~~~

哦 ~ 對了 ~ 忘了告訴你 , 記得要在 模組 DataEntry 內的 Sub Entry() 的 FIRST: 部份加回啟動 AddRecord 的程式碼哦 ~


( Pic15_3 )

下面多了一句程式碼 ?? 自己想想有什麼用吧 ~ 沒用的我就不放在這裡嚕 ~ 嘿嘿嘿 ~ 之前有說過的 XD

下一回 , 我們就來一個總結吧 ~ 還有要告訴你一些在使用 EXCEL - VBA 時 , 你必須要知道的限制 ~ 下一回再見嚕 ~ 88 ~

Part14 - VBA 學習第十三回 - 增加新記錄 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


上一回的習作沒有把你搞瘋了吧 XD 哈哈 ~ 在學新的東東之前 , 先告訴你答案吧 ~


( Pic14_1 )

看到了吧 ~ 很簡單的判斷方法 , 如果沒有輸入對應的資料 , 那就顯示一個訊息 , 和自動選擇 A2 到 K2 所有的儲存格 , 把資料刪掉 ~ 呵呵呵 ~ 就是這麼簡單了 ~ 如果你想到了 , 那麼我就有真心的祝福你 ~ 你自己開發的工具很快就可以誕生嚕 ~ 不是現在的這一個哦 ~ 這只是練習來的 ~

好了 ~ 收拾一下心情 ~ 我們又要搞一個新的模組了 ~

這一次是放在 模組 AddRecord 裡面的 , 名稱就定義為 AddNewRecord 吧 ~ 上一次做出來的是在報表什麼都沒有的時候使用的 , 那麼 , 如果現在已經出現了第一行記錄 , 我們之前所編寫的 FirstRecord 根本就不能應用在這裡 , 因為 FirstRecord 是針對第二列 ( 就是第一個記錄位置 ) 來計設的 , 如果我們就這樣使用的話 , 一定會出問題的 , 所以我們要作出修改 .


( Pic14_2 )

由於第一個記錄出現了之後才會使用到這個模組 , 所以我們就要利用 End(xlDown) 這個命令來配合我們的需要 . 首先我們要讓程式選取 B1 的儲存格 ( 為什麼嗎 ? 之前有說過的 ~ 想一想哦 ~ ) , 之後 , 利用 ActiveCell.End(xlDown).Select 這句程式碼 , 命令電腦找出最後一個有資料而又是 B 行的儲存格 . 因為我們不會知道找出來的是 B 什麼的儲存格 , 但是我們必須要讓電腦記住這個數值 , 所以 , 程式碼就出現了 LastRec = ActiveCell.Row , 利用 LastRec 這個變數 , 記錄找到出來的儲存格的 "列" 的值 .

之後 , 利用 Worksheets("Sheet1").Range("A" & LastRec + 1).Value = LastRec 這一句程式碼 , 使電腦自動在適當位置把應該要有的數值加上去 , 打個比喻 , 如果 LastRec 的值是 7 , 那麼剛才的一句程式碼 , 就是要電腦在 儲存格 "A" & 7 + 1 , 即儲存格 A8 內的值變成 7 . 這裡對於初學者來說會有點煩人 , 因為利用這個方法的話 , 很多時要很細心地去想清楚 , 什麼時候要 +1 什麼時候要 -1 還有什麼時候不用更改 . 所以要好好的想清楚才加進程式碼 , 否則你一定會覺得煩死了 ~ XD

往下的一大段 , 和之前在做 FirstRecord 時沒有什麼分別 , 只是把原本指定了 A2 B2 的東西全部改過來 , 變成 "B" & LastRec + 1 等等 , 所以這裡就不再作詳細解釋了 , 值得再說一遍的 , 是怎樣利用 LastRec 等等的變數 , 使電腦按照我們的指示工作 , 緊記 , 如果要利用變數來取得不確定的數據位置 , 在使用時一定要先想清楚什麼時候要加或者減 , 還有就是要緊記程式碼的編寫方法 .Range("A" & LastRec ) , 假設你要在 "A" 這行使用 , 就要用 "" 給括住 , 再用 & 來告訴電腦後面的是變數 , 合起來才是我們想要的位置 .

嘿嘿嘿 ~ 呵呵呵 ~ 習題又來嚕 ~~~~

這一之和上一次沒什麼分別 , 分別就在於這次的記錄位置是一個不確定的數值 , 今次的比較麻 , 你就慢慢想一想吧 ~ 下一回 , 我再告訴你答案 , 先試試自己動腦筋想一想哦 ~ 否則你是學不會的 ~ 加油 ~ 加油 ~ 加油 ~

如果你上一次的習題搞定了 , 這一次都一定可以的 :) 今次的提示嘛 ... 嗯 ... 嗯 ... 嗯 ... 就記住 LastRec 吧 ~ 答案都差不多說出來了耶 ... ... ...

2008年7月30日星期三

Part13 - VBA 學習第十二回 - 第一個記錄 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


既然準備中作已經完成 , 我們就一起來寫一個非教學而是有實際用途的模組吧 ~ 不過由於時間關係 , 所以我已經做好了 XD

好 , 你先不要看程式碼 , 我們要先想一想 , 要在報表增加一個新記錄 , 所以我們會預到一個之前有討論過的問題 , 就是如何要電腦明白 , 我們到底想怎樣 . 利用之前我教過你的東西 , 我們就可以做到教電腦判斷的目標 .


( Pic13_1 )

在模組 DataEntry 內的 Sub Entry() , 我們有這樣的一段程式碼 , 目的就是要讓電腦明白 , 我們要它用什麼條件來做判斷 , 也就是說 如果 Sheet1 中的儲存格 B2 等於空白 , 變數 Number = 2 , 否則 Number = 1 .

當 Number 這個變數的值是 1 或者 2 , 我們都會要它根據我們的指示進行工作 , 也就是程式碼中的 :

If Number = 1 Then GoTo First
If Number = 2 Then GoTo Second

First: 的部份現在先不談 , 我們先解決了第一次使用時所帶出來的問題 , 稍後回來再想 .

在 Second: 的部份中 , 程式碼就只有一句 , 就是要電腦找到 模組 NewReport 內的 FirstRecord 來執行 .


( Pic13_2 )

在 模組 NewReport 內的 FirstRecord 中 , 我們第一件事要做的 , 就是要電腦在 A2 的儲存格中 , 把記錄編號定為 "1" , 所以就利用到最初學到的方法 Worksheets("Sheet1").Range("A2").Value = "1" .

之後 , 我們要電腦判斷到底使用者選擇了狀態 , 到底是 PI , RM 還是 OUT , 所以 , 我們要電腦去檢查使用者的選擇 , 如果使用者選擇了什麼 , 電腦就要在報表的狀態欄記錄什麼 . UserForm1.OptionButton1.Value = True 的意思 , 就是被選擇 , 如果是 = Flase , 就是沒有被選擇了 . 只要電腦判斷成功 ( 就是使用者選擇了其中的個選項 ) , 電腦就會繼續執行程式 , 打個比喻 , 如果 OptionButton1 ( PI ) 被選擇 , Sheet1 中的儲存格 B2 的值就變成 PI , 儲存格 C2 和 D2 的值就分別變成 TextBox1 和 2 內的文件 ( If UserForm1.OptionButton1.Value = True Then Worksheets("Sheet1").Range("C2").Value = UserForm1.TextBox1.Text ) , 最後就在日期位置加上一條函數 ( Worksheets("Sheet1").Range("E2").Formula = "=today()" ) , 不過 , 由於 =TODAY() 這個函數會根據電腦內的時鐘而每天變化 , 但是我們的記錄是在今天發生就是今天發生 , 不會每天日期都改變的 , 如果日期每天都改變 , 報表就失去了記錄日期的意義和用途 , 所以到最後 , 我們又在程式碼上加上一句 ( Worksheets("Sheet1").Range("E2").Value = Worksheets("Sheet1").Range("E2").Value ) 讓儲存格 E2 的值變成 E2 的值 .

可能你會覺得 " 把 儲存格 E2 的值變成 儲存格 E2 的值 " 這句說話很搞笑 , 但是我要告訴你 , 這是一個很好玩 , 而且是必需要知道的東西 . 剛才有說過 , 函數 =today() 是會按照電腦內的時鍾來每天更新的 , 今天你打開這個報表的時候是 1 號 , 記錄了東西 , 下班時看到記錄沒錯 , 但是到第二天 2 號回來的時候 , 你就會看到報表內所記錄的日期全部都變成 2 號了 , 所以為了記錄正確的發生日期 , 都必須要把函數式所得到的結果放在原本的位置上 , 並把原本的函數式取代 ( 由於這樣增加函數式取答案比較方便 , 所以我自己所設計的程式很多時候都會這樣做 , 就是設定了函數式 , 再把 " 儲存格 XX 的值變成 儲存格 XX 的值 "

如果你還是搞不懂 , 來 , 做個實驗吧 ~ 在 E2 的儲存格打上 =TODAY() , 之後你會看到 儲存格 E2 的值是一個日期 , 但是當你看看上面 , 顯示 Fx 的位置 , 你卻可以清楚地看到 =TODAY() 的存在 , 當你要電腦進行 " 把 儲存格 XX 的值變成 儲存格 XX 的值 " , 就是自己把儲存格複製 , 再選擇性貼上 , 選擇只貼上 " 值 " , 這樣你就會發現 , 不管你在那裡看過去 , 函數式都已經不見了 , 留下來的就只有一個不會隨意改變的 " 值 "

判斷 PI , RM 和 OUT 三個不同狀態的方法是一樣的 , 所以你可以看到三組程式碼是很接近的 , 只是當中的儲存格位置和 OptionButton 的序號不同了 . 到程式的最後一段 ( '如果 OptionButton 1 - 3 都沒有被選擇 , 就顯示訊息 "沒有選擇狀態" ) , 這句程式碼太長了 , 所以我在這裡再貼一次 ( If UserForm1.OptionButton1.Value = False And UserForm1.OptionButton2.Value = False And UserForm1.OptionButton3.Value = False Then MsgBox "沒有選擇狀態" ) , 這句程式碼能夠告訴電腦 , 當發現三個選項都沒有被選擇的時候要做什麼 , 當選項 1 , 2 和 3 都沒有被選擇 , 就顯示一個訊息 "沒有選擇狀態" , 之後 , 因為三個選項都沒有被選擇 , 所以這個記錄是不成立的 , 所以之前在記錄編號增加了的東西 , 就應該刪除 ( If Worksheets("Sheet1").Range("B2").Value = "" Then Worksheets("Sheet1").Range("A2").Value = "" )

當然 , 有一些東西我是沒有加進去的 , 因為這是我特別為你安排的哦 ~ 你要學懂怎樣好好利用 VBA , 這個練習可不能小 ~ 嘿嘿嘿 ~

聽好了 ! 問題來嚕 ~

既然我們有能力要電腦判斷三個選項有沒有被選擇 , 如果沒有選擇就會跳出一個訊息提示 , 那麼 , 記錄時不可能不記錄產品和數量的資料吧 , 如果沒有這些資料 , 這一行記錄都是沒用的哦 ~

所以 , 你要做的 , 就是利用剛才的方法 , 想一想到底要怎麼寫這一部份的程式碼 , 讓電腦幫你判斷到底使用者有沒有輸入足夠的資料 , 如果沒有的話 , 就跳一個訊息出來 .

放心 , 如果你能夠看得懂上面的東西 , 這個問題是一點困難都沒有的 :) 再給你一個提示 , 記住 "判斷" 這個字眼 XD 答案來的哦 ~~~ 呵呵呵 ~~~

2008年7月29日星期二

Part12 - VBA 學習第十一回 - 更多的新事物 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


之前我們都學到了很多東西 , 包括要電腦幫我們選擇 , 要它顯示訊息 , 打造使用者介面 , 增加模組 , 啟動模組等等 . 現在我們就要利用之前學到的 , 和一些新的技術 , 讓我們的倉庫管理程式能夠正式運作 .

首先把之前所保留的程式碼刪掉吧 ~ 我們現在都不需要這些了 , 現在增加一段新的程式碼 Sub Entry . ( 記得嗎 ? 為了方便管理 , 所以名字上要小心地考量一下 , 否則 , 當過了一段日子之後 , 你再看程式碼會不知道它在做什麼哦 ~ )

嗯 ~ 我們來想一想 , 我們要怎樣做 ~

第一 , 要把使用者在使用者介面輸入的東西順利加到報表內 .

第二 , 程式要能夠確定到底最後一個記錄在那裡 .

第三 , 使用者輸入的東西 , 在加到報表的時候 , 要加到適當的位置 , 避免記錄出錯 .

第四 , 我們要怎樣才能打開使用者介面 ... ... ...

先從簡單的東西開始吧 ~ 怎樣打開使用者介面 !

之前 , 我們在 EXCEL 加了一排新的按鈕

( Pic12_1 )

其中一個按鈕 , 可以製造一個按鈕在報表上


( Pic12_2 )

我們就增加一個按鈕吧 ~


( Pic12_3 )

雙擊按鈕 , 會自動進行程式碼編寫窗格 , 你會看到 Private Sub CommandButton1_Click() 和 End Sub , 我們就在這裡加一點東西 , 請你現在打上 UserForm1.Show . 完成之後 , 再打開報表的頁面 , 按一下那個剛剛做出來的按鈕 , 看到使用者介面跳出來了嗎 ? 沒有 ~ 又出問題了嗎 ... " 點兩次又回到程式編寫的介面耶 ~ "

放心放心 , 看一下下面的圖 , 按一下紅色箭頭所指的圖示吧 ~ 告訴你 , 我們在增加按鈕的時候 , 這個按鈕就反白了 , 它是什麼 ? 它就是控制開啟和結束編輯模式的按鈕哦 ~ 記住了 ~ 增加按鈕之後一定要把它按回 , 否則你的按鈕就不能用了 . 如果你有注意看 , 我們剛剛所增加的按鈕上面有六個白色的圓點 , 如果結束了編輯模式 , 這六個白色圓點就會不見了 .


( Pic12_4 )

現在再按一次我們的 CommandButton1 吧 ~ 看了到哦 ~ 使用者介面出來了 ~ 哈哈哈 ~ 先按使用者介面的右上角的 x 關掉 , 然後我們就把不能關閉使用者介面的問題解決 .

打開程式碼編輯介面 , 打開 UserForm1 , 在結束按鈕上連點兩次 , 打開程式碼部份 , 在 Private Sub CommandButton2_Click() 和 End Sub 中間 , 加一行程式碼 END , 回到報表 , 再按一次那個 CommandButton1 打開了使用者介面 , 按一次結束按鈕 ... ... 嘿嘿嘿 ~ 成功了 ~ 使用者介面關掉了 ~ 如果你在設計使用者介面時 , 設計了按鈕來結束程式 , 只要在按鈕內加上一句 END , 之後 , 你的那個結束按鈕就能夠運作了哦 ~

現在我們回到 模組 DataEntry 的 Sub Entry() , 現在就開始程式編寫的偉大工程 ~ 有記得我們對於報表的輸入要求嗎 ? 要求一 : 電腦要懂得自己增加記錄編號 , 二 : 一定要記錄使用者所選擇的狀態 , 三 : 三個不同狀態的記錄位置要分開 .

為了方便之後的除蟲 ( DEBUG ) 工作 , 先增加多兩個模組 , 第一個負責第一次增加記錄時使用 ( 即沒有任何記錄時使用 ) , 名稱定為 NewReport , 第二個負責往後的增加記錄 ( 即報表已經有一個或更多記錄 ) , 名稱定為 AddRecord .


( Pic12_5 )

好 ~ 準備工作又完成了 , 下一回 , 你將會學到更多的東西 , 和正式打造你的第一個模組 ~

對了 ~ 再告訴你一件事 , 如果想要更改在報表上 CommandButto1 這個按鈕的名字 , 只要在程式設計畫面的左上方 , 專案窗格內點選 Sheet1 , 之後 , 在左下方屬性窗格頂部的下拉式選單找到 CommandButton1 , 再修改它的 Caption 就可以了哦 ~

下一回再見嚕 ~

2008年7月28日星期一

Part11 - VBA 學習第十回 - 正確 , 不正確 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


上一次有提過 , 如果按照以下的程式碼


( Pic11_1 )

當 Sheet1 中的儲存格 B2 有資料時 , 會有一個訊息視窗跳出來顯示 "正確" 再顯示 "錯誤" , 這是因為電腦在閱讀程式碼時 , 是一句一句往下看的 , 所以現在我們就要告訴電腦 , 怎樣避開這個問題 .

記得我們第一次編寫模組時 , 我教過你的東西嗎 ? 增加模組之後 , 我們就可以在編寫程式碼的位置增加一個 SUB XXX . 當然 , 我們不用每一次都先開一個模組 , 再增加一段程式碼 , 如果是這樣的話 , 當你要進行管理或者除蟲 ( DEBUG ) 時 , 就會變得十分不便 , 試想像 , 一個程式有數百個模組 ... ... 暈了 ... ... 當然 , 如果你的程式利害得可以控制什麼飛機大炮 , 就有可能會出現上百個模組 , 但是我們在開發 VBA 程式的時候 , 我們只是要開發一些適合的工具給自己 , 如果你要的功能太利害 , 我也不建議你用 EXCEL - VBA 來開發 ~

現在我們先在 End Sub 下面 , 再增加一段新的程式碼 , 這是獨立的 , 放心 , 電腦不會隨便執行的 .


( Pic11_2 )

我所增加的名字是 BBB ( 只是方便吧 ~ 懶得去想個好名字而已 XD ) , Sub BBB 內的程式碼就是之前的 MsgBox ("正確") , 再看一看上面 Sub AAA 程式碼的改變 , 當 Sheet1 中的儲存格 B2 有資料 , NUMBER 這個變數就會等於 1 , 當 NUMBER 這個變數等於 1 , 就跳到 FIRST: 的部份執行 , 改變的地方就在這裡了 ( 對你來說也是一個新的東西吧 XD ) , 這裡多了一句 DataEntry.BBB , 這一句的意思 , 就是要電腦找到 模組 DataEntry 內的 Sub BBB , 也就是說 , 當 NUMBER 這個變數的值等於 1 的時候 , 電腦就要執行 FIRST: 的部份 , 在 FIRST: 部份內的指令就只有一個 , 就是跳到 DataEntry 模組內 , 找出 程式碼 BBB 然後執行 .

現在 , 我們先想像一下程式在執行後的效果吧 . 首先 , 我們把 Sheet1 中的儲存格 B2 中的資料刪除 , 理論上來說 , NUMBER 這個變數的值就等於 2 , 會執行 SECOND: 的部份 , 之後就會有一個訊息跳出來顯示 "錯誤"


( Pic11_3 )

看到嗎 ?? 看不到 ?? 怎麼會呢 ~ 等我想一想 ... ... ... 哦 ~ 對了 , 忘了告訴你 , 先在 Sub AAA() 這一行程式碼 , 用你親愛的滑鼠指著它點一下左鍵 , 再按播放吧 ~ 呵呵呵 ~ 可以看到了嗎 ? 哈哈 ~ 不要忘記哦 ~ 電腦很笨的 XD , 你一定要先點一下第一行 , 好等電腦知道那裡是程式的第一行哦 ~

好 ~ 讓電腦發現錯誤和告訴我們的程式碼沒有問題了 , 那麼 , 現在就要測試一下 , 要它執行 FIRST: 的部份 , 首先在 Sheet1 中的儲存格 B2 加一點資料 , 什麼文字也好 , 只要有東西就可以了 ~

先想像一下 , 現在 B2 的儲存格是有資料的 , 那麼 NUMBER 這個變數就會等於 1 , 也就是會執行 FIRST: 的部份 , 而 FIRST: 這個部份中 , 就只有一個指令 , 就是要電腦找到模組 DataEntry 內的 程式碼 BBB , 理論上來說 , 如果程式碼沒有出錯 , 那麼 , 我們就會看到 "正確" 的訊息了 .


( Pic11_4 )

按一下確定吧 ~


( Pic11_5 )

等等 ~ 怎麼搞的 ~ "正確" 之後又看到 "錯誤" 了耶 ~~~~~~

你是這樣想吧 ~ 哈哈哈哈哈 ~ 不要騙我了 ~ 我完全知道了你在想什麼 ~ 哈哈哈哈哈 ~

好吧 ~ 等我來再說明一次吧 ~ 電腦在閱讀程式碼的時候 , 是一句一句往下看的 , 不信的話 , 你在 Sub AAA() 點一下左鍵 , 之後慢慢地按 "F8" , 準備執行的程式碼會變了顏色的 ( 我之前有告訴過你吧 ~ ) , 看到嗎 ? 每按一次 "F8" 它就會執行一句程式碼 , 現在我們直到它執行到 Sub BBB() 的部份 , 看看執行完了之後 , 程式碼跳到那裡 ~


( Pic11_6 )

看到了吧 , 問題就在這裡了 , 按照正常情況來說 , 一個報表的第一個記錄 , 只會在第一次使用時沒有資料 , 不會每天都沒有資料的 , 如果是每天都沒有資料 , 那這個報表就沒有存在的意義了 ~ 再想一想 , 電腦閱讀程式碼是一行一行往下看的 , 當完成 FIRST: 的部份 , 很自然地就會執行 SECOND: 的部份了 , 完成 SECOND: 的部份之後 , 就來到了程式碼的最後一句 End Sub .

所以 , 我們又要再一次動動腦筋 , 修改一下程式碼的執行順序 , 可以怎樣做呢 ? 想到嗎 ? 就把 FIRST: 和 SECOND: 這兩個部份的程式碼次序反過來放吧 ~


( Pic11_7 )

剛才說過了 , 電腦閱讀程式碼是一句一句看的 , 報表也是在第一次使用時是沒有資料的 , 所以在第一次使用時 , 是必定會出現錯誤的 , 而剛才說過的問題 ( 先 "正確" 後 "錯誤" ) 還是會出現 , 只是次序不同了 ( 變成 先 "錯誤" 後 "正確" ) , 所以 , 我們又要再錯加多一點 , 使程式碼在顯示 "錯誤" 之後 , 直接跳到 End Sub 就好了 , 有想到方法嗎 ? 嘿嘿嘿 ~ 就是使用 GOTO 嘛 ~


( Pic11_8 )

現在的程式碼又改變了 , 當顯示 "錯誤" 這個訊息之後就直接跳到 FINISH: 的部份 , 當電腦跳到 FINISH: 的時候 ~ 嘿嘿嘿 ~ 直接完結了 ~ 如果顯示 "正確" , 那麼完成 Sub BBB 之後就是完結 , 哈哈 ~ 問題避開了耶 ~ 是不是很高興 ~ 哈哈哈 ~

可能你現在又多了一個問題 , 既然 GOTO 這個方法可以避開上述的問題 , 那麼 , 我們有必要把程式碼反轉來放嗎 ? 答案是沒有的 ~ 哈哈哈 ~ 只要在增加 FINISH: 這個部份之後 , 分別在 FIRST: 和 SECOND: 下面增加一句 GoTo Finish 就可以了 ~ 不過 , 我的原意是要你明白 , 不管你的程式碼怎樣放 , 電腦都是一句一句來閱讀的 ~


注意 !

當要利用程式碼呼叫模組內的子程式 , 必需要緊記程式碼的模組名稱必需跟你設定的模組名稱一致 , 比如說 , 你設定的模組名稱是 Module1 內有一個子程式 ABC , 那麼你的程式碼就是 Module1.ABC , 但是 , 如果你所設定的模組名稱改過來了 , 比如 DataEntry , 那麼你的程式碼就要改為 DataEntry.ABC , 這個必須要注意哦 !!

2008年7月26日星期六

Part10 - VBA 學習第九回 - 電腦的選擇 ~ ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


上一回有說過 , 如果在報表沒有任何資料的時候 , ActiveCell.End(xlDown).Select 這一句程式碼會變得怪怪的 , 而且會選擇了 65536 的儲存格 . 所以 , 今次我們要做的 , 就是要使電腦學會選擇 . ( 注意哦 ~ 不是要它有人工智能 , 只是要它按照我們的指示來做事哦 , 人工智能就別想了 , 這是大部份程式設計者都有過的夢呢 ~ 呵呵 ~ )

首先 , 我們要想清楚一件事 , 現在我們的報表中 , 是什麼記錄都沒有的 , 如果要在第一個記錄位置把資料記錄下來 , 直接使用 Activecell.End(xlDown).Select 就會出問題了 , 所以我們要先叫電腦去確定 儲存格 B2 到底有沒有東西 . 而最簡單而且又是最直接的方法 , 就是 IF ~ THEN ~ ELSE ~ , 按照我們例子中的要求 , 我們要告訴電腦 , 如果 儲存格 B2 沒有資料 , 就進行 ... 否則 ...

既然我們知道了第一部 , 現在要想的就是 " 當儲存格沒有資料 , 電腦要怎樣做 " 和 " 否則要怎樣做 "

感覺到一點點煩惱了嗎 ?? 哈哈 ~ 如果你是編寫程式的初寫者 ( 菜鳥級 ) , 那麼你一定會開始感到頭痛了 , 可能在說 " 又這又那的 , 真煩人 ~~ 不學了 ~ " , 冷靜點哦 ~ 別著急 , 你一定可以搞清楚的 , 放心吧 ~ 我以前也是搞不懂的 ~ 呵呵呵 ~

想一想 , 我們可以要電腦每一次都確定下一個記錄位置有沒有資料 ( 電腦做事的時候 , 給它電來吃就好了 , 不用給錢的 ~ 呵呵呵 ~ ), 但是程式的執行速度會變得十分驚人 , 簡單的東西可能要十分鐘才完成 , 這樣子不就是廢物嗎 ? 所以 , 在考慮解決方法的時候 , 太過耗費時間的方法就可以不考慮了 . 如果我們配合之前學到的 Activecell.End(xlDown).Select 一起使用又會如何呢 ?? 當你想到這一點 , 就證明你真的想學會怎樣自製工具了 ~ 加油 ~ 加油 ~ 加油 ~

在我告訴你怎樣解決問題之前 , 我要先教你一個東西 , 就是在程式設計上 , 最基本的選擇方法 : GOTO .

GOTO 這個方法就是要電腦去指定的地方 , 比如說 , 如果現在時間大於或等於 18:00 , 就回家 , 否則 繼續工作 . 回家 , 我們可以想成一個步驟 , 而電腦程式在利用 GOTO 這個東西的時候 , 情況就跟這個比喻相似 .

我們現在先在程式碼上加一點東西 , 讓我們可以看得到程式是怎樣運作的 .

Worksheets("Sheet1").Range("B2").Select
If Worksheets("Sheet1").Range("B2").Value = "" Then Number = 2 Else Number = 1
If Number = 1 Then GoTo First
If Number = 2 Then GoTo Second

First:
MsgBox ("ab")

Second:
MsgBox ("cd")

如果 Sheet1 中的儲存格 B2 的值是空白 , 那麼 , Number 這個變數就等於 2 , 否則 Number 這個變數就等於 1 , Number 這個變數可以是任何的字 , 不過當然了 , 如果你什麼時候都是 "a" 或者 "aa" , 當你要電腦考慮的東西越來越多的時候 , 你在程式碼所看到的 "a" 或者 "aa" 就會越來越多了 , 所以為了方便程式編寫 和 除蟲 ( DEBUG ) , 想一些貼切點的會比較好 .

如果 Number 這個變數是 1 , 就去 First , 如果 Number 這個變數是 2 , 就去 Second , 程式碼很容易理解吧 ~ 哈哈 ~ 再下面有看到 , First 和 Second 這兩個東西 , 不過後面都加了一個 ":" , 這個就是要告訴電腦 , 你要去的地方就在這裡 , 這就是 FIRST , 這就是 SECOND . MsgBox("???") 就是打開一個訊息視窗 , 效果嗎 ? 我們來做一下實驗就可以看到了嘛 ~ 先別急 , 我們現在先到 B2 的儲存格加一個數字上去吧 ~ 再按一下上面的播放按鈕 ~ ( 現在 Sheet1 中的儲存格 B2 是有東西的 , 那麼 NUMBER 就會等於 1 , 而且要走到 FIRST: 那裡 )

看到了嗎 ~ 看到了嗎 ~ 先看到 訊息 ab , 還可以看到 訊息 cd 哦 ~ 放心放心 ~ 我這邊的情況也是一樣的 , 你的電腦沒問題 ~ 放心吧 ~ 電腦就是這樣 , 一行一行的往下看 , 真夠笨的 ~ 哈哈 ~ 不過這樣還好 , 我們就是要給這個笨蛋指令來幫我們做事 ~ ( 這個笨蛋不會說 " 不 ~ " 的哦 ~ 哈哈 ~ )

好了 , 現在再一次吧儲存格 B2 的東西刪掉 , 看看有什麼發生 ~ 哈哈 ~ 只看到 "cd" 這個訊息吧 ~ 這次電腦跳過了 FIRST: 的部份了 ~ 很奇怪吧 ~ 哈哈 ~

好 ~ 如果我們的訊息不是 "ab" 和 "cd" 這兩個東西 , 換了別的之後不就是很怪了嗎 ? 如果把 "ab" 換成 "正確" , "cd" 換成 "錯誤" , 那麼你就會先看到 "正確" 再看到 "錯誤" , 你可以告訴我 , 這到底是正確還是錯誤嗎 ?

現在你應該對電腦程式的了解又多了一點吧 ~ 就是它只會一步一步往下走哦 ~ 不會跑也不會跳 ~ 手也累了 ~ 你就先想一想今次教你的東西吧 ~ 先搞清楚它到底是怎樣運作的 , 因為往後會接觸到的選擇比這個還要複雜 , 所以先搞清楚這個的運作模式是很重要的 ~

重點 : 電腦不會自己思考 , 它是要你告訴它怎樣選擇才會作出適當選擇的 . 電腦看程式碼的時候跟我們不一樣 , 我們是上上下下不停看 , 但是電腦不會的 , 你叫它做一次就是一次 , 選擇一次就是一次 , 程式碼你要它看一次就是看一次 , 除非你要它回去再看 , 就是這樣了 ~

今次教你的比較麻煩一點 , 所以請你用多一點時間掌握這裡的東西 , 下一回 , 我就會教你 , 怎樣才可以使電腦只顯示 "ab" 而不顯示 "cd" . 從此 "正確" 就是 "正確" , "不正確" 就是 "不正確" , 不會先 "正確" 後再 "不正確" 了 .

2008年7月25日星期五

Part09 - VBA 學習第八回 - 煩惱要開始了 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


之前已經做好了一個使用者介面 , 現在 , 我們要開始動手做一個模組了 , 增加模組的方法就跟增加使用者介面的第一步一樣 . 增加模組之後 , 就在屬性窗格內把 (Name) 的值改成 DataEntry 吧 , 這樣子是為了方便自己辨認 . ( 名字是可以隨你改變的 , 但是必須要以容易辨認來做大前提 )

或者你在想 , 為什麼要增加模組 ? 模組對於很多人來說只是一個聽過但又不知道是什麼的東西 , 實際一點來說 , 如果在程式編寫的時候 , 我們利用不同的模組把程式碼分開擺放 , 對於日後我們要除蟲 ( DEBUG ) 就方便得多了 .

打個比喻 , 就好像你身上有三張港幣五張人民幣七張新台幣 , 當你在香港的時候要用港幣 , 在國內要用人民幣 , 在台灣要用新台幣 , 但是你卻把它們亂七八糟的堆在一起 , 到你要使用的時候就要一張一張的看清楚可不可以用 , 但是只要你把它們分門別類 , 需要使用的時候就方便多了 .

模組的情況也是一樣 , 程式設計者大部份都會把不同功能的模組分開擺放 , 目的就是為了在除蟲時放便找到出問題的地方 , 而且分開製作的時候 , 同時也可以讓思想變得更清晰 , 一步一步的想清楚 , 程式出錯的機會就會大大降低了 . 另一方面 , 如果要你編寫的是一個非常龐大的項目 , 一個人根本不足以應付 , 比如大型軟件 , 遊戲等等 , 的確 , 一個人是有可能可以把程式碼完成的 , 但是要花的時間就是一大堆人一起做的幾倍 . 要不然公司就不用把不同功能的部門分開了 .

我們之前所訂下來的目標 , 就是要做一個簡單的倉庫管理系統 , 之前有提過 , 一個倉庫的數據中 , 最基本而又一定會出現三種不同的情況 , 準備到倉 , 已經在倉 和 出貨 三種 , 但是 , 在程式設計的時候 , 我們要知道的並不是只有這三種情況 , 而是要知道這三種情況中每一個有可能出現的東西 , 和每一個情況中會出現的必須處理事項 . 所以我們的第一步需要先確定 , 到底要電腦做什麼 .

簡單地說明一下 , 如果使用最初我教大家所用的方法 Worksheets("Sheet1").Range("A1").value = "100" , 這個方法的確可以令到電腦按照我們給它的指示進行工作 , 把儲存格 A1 的值改變為 100 , 但是 , 我們每天的要處理的東西又何止一票 ?? 出入次數是一個疑問 , 沒可能確定 , 另一方面 , 如果我們只能在報表的第一個記錄中不停地更新 , 那麼這個報表豈不是只有一行 ?? 沒可能吧 , 所以我們要使電腦能夠分辨出最後一行記錄在那裡 , 然後在最後一個記錄的下面再加一個記錄 . 就在這個時候 , 我們的報表又出問題了 , 之前在訂立報表的格式時 , 行 A - 記錄編號中是什麼都沒有的 , 如果要每一次都先用人手增加一個記錄編號 , 然後再利用我們的程式輸入資料 , 再修正程式碼 , 讓程式找到對應行號才加入記錄 , 這樣的操作方法豈不是笨得要死嗎 ?


( Pic9_1 )

可能你想到的方法跟我說的差不多 , 不過不要緊 , 我們現在再一次細心地想一想 , 到底用什麼方法才可以最簡單而又有效地找到最後一個記錄 . 首先看一看報表 , 從 A 到 K 分別記錄了不同的東西 , A 是記錄編號 , 剛才都說了 , 我們不可能利用人手先增加編號再利用 VBA 的程式來輸入其他資料的 , 狀態就是用來記錄 PI , RM 和 OUT 的欄位 , 紅色部份記錄 PI 的數據 , 橙色記錄 RM 的數據 , 藍色記錄 OUT 的數據 , 我們的目的是要程式自動增加記錄編號 , 所以記錄編號是原全沒有資料的 , PI , RM , OUT 三個部份的資料 , 不可能在同一時間出現的 , PI 不會記錄在 RM 或者 OUT 的部份 , 另外兩個都是一樣 , 每次只會記錄你做過的一個東西 , 如果是這樣的話 , 每一個儲存格都會有東西記錄了的 , 就只有 欄 B 中的狀態了 .

只要想到這一點 , 我們就可以利用 VBA 中的程式碼 , 借助 狀態記錄 把最後一個記錄找出來 , 從而在對應位置的記錄編號增加一個號碼 . 一個名為 End(xlDown) 的命令 , 絕對可以做到我們想要的東西 .

在新增一個模組後 , 在編寫程式碼的窗格輸入 :

Sub AAA()

Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("B1").Select

ActiveCell.End(xlDown).Select

End Sub


( Pic9_2 )

然後在 Sub AAA() 的那一行點一下滑鼠的左鍵 , 再按 F8 , 直到 End Sub 之後再按一次 F8 . F8 是 VBA 中的偵錯功能 , 會由第一句程式碼開始執行 , 每按一次就執行一句 , 現在程式執行完了 , 我們看一看報表的情況 , 很驚訝吧 ~ 哈哈哈 ~ B65536 的儲存格被選擇了 .


( Pic9_3 )

別著急 ~ 別著急 ~ 緊按你的 CTRL 鍵再按上箭頭 , 我們一同回到 B1 的儲存格吧 ~

現在先跟大家講解一下 , 這幾句程式碼是在做什麼 , 首先 , 第一句就是要命令電腦選擇名為 Sheet1 的工作頁 , 第二句就是要他找到 Sheet1 工作頁中的 B1 儲存格 , 第三句大家都沒見過吧 ~ 呵呵呵 ~ 新玩具哦 ~ 哈哈 ~ ActiveCell 就是指現在選擇了的儲存格 , 第二句程式碼選擇了儲存格 B1, 那麼 Activecell 所指的也就是 B1 的儲存格了 . End(xlDown) 就是告訴電腦 " 我要你由這一格開始向下找 , 找到有資料的最後一個儲存格 " , 可能你會有疑問 , 如果按照你所說的 , 找到有資料的最後一個儲存格 , 那麼為什麼會變成 B65536 ?? B65536 可是什麼東西也沒有耶 ~ 對 , 我並沒有說錯 , 他是會找到對應位置的 , 如果 B1 儲存格有資料 , 電腦會按照指示向下找到連續記錄中的 , 最後一個有資料的儲存格 , 如果 B1 沒有資料 , 它就會向下找到最後一個有資料的儲存格 , End(xlDown) 就跟你在報表內緊按 CTRL 再加上下左右的功能一樣 " () 內的指令可以更改為 xlToLeft , xlToRight , xlUp , xlDown 來處理你所需要的上下左右 "

還是不相信嗎 ? 來 , 我們來做一個實驗 , 看一下圖片


( Pic9_4 )

先按照圖片在報表中加上一些亂來的數據 , 然後選擇 B1 的儲存格 , 按一下 CTRL + 下箭頭 , B2 被選擇了 , 再按一次 , B4 被選擇了 , 按下 CTRL + 右箭頭 , 儲存格 F4 被選擇了 , 很簡單吧 ~ End(xlDown) 的使用方法就是這樣了 . Select 就不用說明了吧 . 剛才程式執行時 , 因為由 B2 開始到 B65536 都沒有數據資料 , 所以程式就一直找 , 找到 B65536 就停下來了 , 你知道為什麼嗎 ? 因為 EXCEL 最多只有 65536 , 英文字母最多排到 IV .


( Pic9_5 )

現在我們知道了 ActiveCell.End(xlDown).Select 這句程式碼可以找到最後一個記錄 , 那麼我們還要想辦法避開一個問題 , 就是當儲存格 B2 沒有資料時所導致的運作不正常 ( 直接跳到 B65536 的問題 ) , 如果我們增加幾句程式碼 , 要電腦先檢查 B2 的儲存格有沒有資料 , 如果有資料就尋找最後一個記錄的位置 , 否則就直接使用這一個位置 , 這樣又可以嗎 ?

先賣一個關子 , 打字太多手也累了 XD

下一回 , 我們就來玩一玩一個新遊戲 , 一個讓程式設計者都感到有點暈眩的東西 , 但是搞不定你又會很痛苦的東西 ~ 呵呵呵 ~ 不用怕 ~ 你能夠看到這裡就已經證明我的簡化能力蠻高的嘛 ~ 哈哈 ~ 你應該不會看不懂吧 XD ~ 相信我 , 我會帶你走進這個 VBA 的世界 ~ 讓你感受一下自己開發工具幫助自己工作的威力 XD

2008年7月24日星期四

Part08 - VBA 學習第七回 - 打造一個使用者介面 ( 繁體 )

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

~ 聲明事項 ~

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

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

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

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

Picture


我們的報表已經有了 , 現在我們要準備的就是之前所提過的三個巨集 , 和一個使用者介面 .

當然 , 我們可以不用使用者介面 , 叫使用者在報表上打上去就好了 , 但是有一個問題 , 如果是這樣子的話 , 你們是學習不到如何打造一個使用者介面的 , 所以嘛 , 一起來打造一個吧 ~ 哈哈哈 ~

先打開 VISUAL BASIC 編輯器 , 在專案的部份 , 用你那親愛的滑鼠指著 MICROSOFT EXCEL 物件點一下右鍵 . 選擇插入 -> 自定表單 .

按下之後 , 你應該會跟我一樣 , 看到下面的畫面 .


( Pic8_1 )

UserForm1 就是我們將會學習到的使用者介面了 , 這個東西可以自由放大縮小 , 只要你喜歡就好了 . 旁邊有一個 工具箱 , 裡面的按鈕我就不跟你一個一個的介紹了 , 有空就按下去 , 看看是什麼東西吧 .

現在 , 我們要確定使用者在這個介面上能夠操作我們所定下來的報表 , 也就是說 , 這個介面上要能夠處理數據的輸入 .

之前所定義下來的三個狀態有忘記了嗎 ?? 就是 準備入庫 ( PI ) , 已經在倉庫 ( RM ) 和 出貨 ( OUT ) .

在程式設計的世界中 , 除了要功能夠多夠利害之外 , 還有一個問題就是要讓使用者覺得方便 . 要使用者覺得方便是一門很很很很很深奧的學問 , 你現在應該只是初學者吧 , 方便使用者的這個規定 , 就留待往後再想吧 ~

現在 , 我們先在 UserForm1 中增加一點東西 , 來控制報表的數據記錄 . 首先 , 我們要增加三個 選擇按鈕 ( OPTION BUTTON )


( Pic8_2 )


( Pic8_3 )

對了 , 你還記得 VISUAL BASIC 編輯器中 , 左下角的那個屬性窗格嗎 ? 現在我們就要來玩一玩 ~ 呵呵 ~

在 UserForm1 的灰色部份用你的可愛滑鼠點一下 ( 左鍵哦 ~ ) , 之後看看屬性窗格 , 找到 Caption , 有看到 UserForm1 這個字嗎 ?? 試試把它改過來吧 ~ 什麼都好 ~ 你喜歡就好了 ~ 或者你試試打上 : 超級萬能全天候功能報表吧 , 或者是你的老公老婆的名字也可以哦 ~


( Pic8_4 )

注意哦 , 要修改這個名字 , 並不是修改 (Name) 內的值 , 是要修改 Caption 的值哦 ~

好了 , 現在也把三個選擇按鈕的 Caption 也改過來吧 ~ 方法是一樣的 . 把它們改成 PI , RM 和 OUT , 記得我們的報表要記錄什麼嗎 ? 除了貨物狀態之外 , 還有就是產品的種類和數量 , 現在三個選擇按鈕已經分別代表了三個不同的狀態 , 所以我們就要設定一個位置 , 給使用者輸入產品和數量 .

選擇 標籤按鈕


( Pic8_5 )

增加兩個標籤 , 一個的 Caption 改成 " 產品 " 另外一個改成 " 數量 " .

再選擇 文字盒 TextBox ( 應該是這樣翻譯吧 ~ 呵呵 )


( Pic8_6 )

又再增加兩個到使用者介面上 , 這兩個不用改 Caption 哦 ~ 因為是沒有的 ~ 呵呵呵 ~

好像還欠了什麼東西這才像一個正常一點的使用者介面 ....... 對對對 ~ 忘了個按鈕 ~

選擇 Command Button ( 這個不知道中文叫什麼 ~ XD )


( Pic8_7 )

加兩個吧 ~ 一個的 Caption 改成 " 記錄 " , 另一個改成 " 結束 "

好了 ~ 現在你所設定出來的東西跟我所設定出來的東西 , 樣子都應該差不多吧 ~ 哈哈 ~ 對對對 , 就是很簡單 ~ 最緊要是方便嘛 ~


( Pic8_8 )

現在就看看你的作品吧 , 上方有一個綠色的右箭頭 , 按一下吧 ~ 看看你所設計的使用者介面在執行的時候是什麼樣子吧 ~ 看到了嗎 ?? 有看到了嗎 ?? 按下結束按鈕都不能結束嗎 ?? 哈哈哈 ~ 放心吧 ~ 沒事的 , 現在我們就還什麼程式碼都沒有寫哦 ~ 沒反應是正常的 ~ 按下右上角的 x 來關掉吧 ~

下一回 , 我們就要開始做第一個模組啦 ~ 不不不 ~ 是你的第一個模組 ~ 不是我耶 ~ 哈哈哈 ~

最新回應

Loading...

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


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