~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~
~ 聲明事項 ~
如各位想把以下本文章轉貼 , 請記得要注明出處.
本文章之內容為本人之經驗所寫, 絕無抄襲成份, 特此聲明.
由於圖片製作需時, 所以更新會比較慢.
存放圖片的 SHARE A PIC SERVER 可能讀取速度較慢, 請耐心等待.
既然準備中作已經完成 , 我們就一起來寫一個非教學而是有實際用途的模組吧 ~ 不過由於時間關係 , 所以我已經做好了 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 答案來的哦 ~~~ 呵呵呵 ~~~
1 留言:
it show I hv bug in my NewRport code
If UserForm1.OptionButton1.Value = True Then Worksheets("Sheet1").Range("B2").Value = "PI"
發佈留言