2008年7月30日星期三

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

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 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 答案來的哦 ~~~ 呵呵呵 ~~~

1 留言:

Unknown 說...

it show I hv bug in my NewRport code


If UserForm1.OptionButton1.Value = True Then Worksheets("Sheet1").Range("B2").Value = "PI"

最新回應

Loading...

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


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