2008年7月31日星期四

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

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 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 吧 ~ 答案都差不多說出來了耶 ... ... ...

12 留言:

匿名 說...

你好:
想要詢問為何我的成是偵錯會一直在這個地方出現Worksheets("sheet1").Range("A" & LastRec + 1).Value = LastRec
我輸入的資料在第二筆之後增加的就一直重疊在第二筆的上面.
這很困擾我.我對了程式碼也沒有錯,想學問原因.謝謝您^^ Linda

威廉先生 說...

Hi Linda ,

如果你每次增加記錄時 , 程式都把資料不停地在同一個位置上重疊 , 那麼你要先檢查一下 , 有沒有把 LastRec 的值設定錯了 , 因為在這裡 LastRec 的值是要程式自己找的 , 如果你把它固定在 1 , 那麼不管怎樣 +1 答案都只會是 2 , 那麼增加記錄時 , 記錄的位置就會不停地在同一個儲存格上重疊了 .

如果還未能解決問題 , 就把你的程式碼貼出來吧 , 我幫你看一下 :)

匿名 說...

Sub addnewrecord()
'尋找最後一個紀錄
Worksheets("sheet1").Range("B1").Select
ActiveCell.End(xlDown).Select
LastRec = ActiveCell.Row
----------------------------------
我寫完開始測試時都沒新增加紀錄編號.這邊我按f8偵測錯勿..看了好幾遍卻不知道問題出在哪了..請大大幫幫我解答..我想把檔案e-mail給你卻不知道你信箱@@
'自動增加紀錄編號
Worksheets("sheet1").Range("A" & LastRec + 1).Value = LastRec

威廉先生 說...

電腦的錯誤訊息寫了什麼 ? 我把你的程式碼直接貼到我的 EXCEL 內執行都沒有問題呢 ~

另外下次記得要署名 , 方便辨認 :)

說...

他出現的錯誤視窗如下

執行階段錯誤'1004;
應用程式或物件定義上的錯誤

而我又發現我的介面記錄按鈕未輸入程式讓它執行,裡面是空白..我該如何輸入?

說...

我在15回問答中找到解答了~就是它"記錄"按鈕沒設定動作..所以導致上句程式沒法順利運作^^

威廉先生 說...

HI 星 ~

問題解決了就好 , 記得多點來哦 :)

Unknown 說...

威廉先生 你好:

我跟樓上的'星"有同樣的問題..
不過我看不懂他所寫的:
"就是它"記錄"按鈕沒設定動作..所以導致上句程式沒法順利運作^^"

請問可以麻煩說明一下嗎?謝謝!!

威廉先生 說...

Hi HangMan ~

" 記錄 " 按鈕要執行三個模組當中的其中一個模組 :)

有點不好意思的是 , 因為第一個系列的教學文都有好幾年歷史了 , 裡面可能有些地方打錯字 , 或者是解釋得不太好 , 而當年做出來的檔案又已經不知所蹤 , 所以我只能盡力回想 XD

Unknown 說...

請威廉先生幫我看一下
這段一直無法在程式執行把A2:K2刪除
If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""
If UserForm1.TextBox1.Text = "" Then MsgBox "請輸入產品"

==================================
Sub firstrecond()

'編號
Worksheets("sheet1").Range("A2").Value = "1"

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

If UserForm1.OptionButton1.Value = True Then Worksheets("sheet1").Range("C2").Value = UserForm1.TextBox1.Text
If UserForm1.OptionButton1.Value = True Then Worksheets("sheet1").Range("D2").Value = UserForm1.TextBox2.Text

If UserForm1.OptionButton1.Value = True Then Worksheets("sheet1").Range("E2").Formula = "=today()"
Worksheets("sheet1").Range("E2").Value = Worksheets("sheet1").Range("E2").Value

'PM
If UserForm1.OptionButton2.Value = True Then Worksheets("sheet1").Range("B2").Value = "PM"

If UserForm1.OptionButton2.Value = True Then Worksheets("sheet1").Range("F2").Value = UserForm1.TextBox1.Text
If UserForm1.OptionButton2.Value = True Then Worksheets("sheet1").Range("G2").Value = UserForm1.TextBox2.Text

If UserForm1.OptionButton2.Value = True Then Worksheets("sheet1").Range("H2").Formula = "=today()"
Worksheets("sheet1").Range("H2").Value = Worksheets("sheet1").Range("H2").Value

'OUT
If UserForm1.OptionButton3.Value = True Then Worksheets("sheet1").Range("B2").Value = "OUT"

If UserForm1.OptionButton3.Value = True Then Worksheets("sheet1").Range("I2").Value = UserForm1.TextBox1.Text
If UserForm1.OptionButton3.Value = True Then Worksheets("sheet1").Range("J2").Value = UserForm1.TextBox2.Text

If UserForm1.OptionButton3.Value = True Then Worksheets("sheet1").Range("K2").Formula = "=today()"
Worksheets("sheet1").Range("K2").Value = Worksheets("sheet1").Range("K2").Value

'都沒選
If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""
If UserForm1.TextBox1.Text = "" Then MsgBox "請輸入產品"

If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""
If UserForm1.TextBox2.Text = "" Then MsgBox "請輸入數量"

If UserForm1.OptionButton1.Value = False And UserForm1.OptionButton2.Value = False And UserForm1.OptionButton3.Value = False Then MsgBox "沒有選擇狀態"
If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""


End Sub

威廉先生 說...

Hi Yin Bin ~

我剛剛測試過 , 我的可以正常運作 , 你再試試把程式碼加一句進去 , 改成這樣再試試好嗎 :)

If UserForm1.TextBox1.Text = "" Then Worksheets("Sheet1").Range("A2:K2").Select
If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""
If UserForm1.TextBox1.Text = "" Then MsgBox "請輸入產品"

If UserForm1.TextBox1.Text = "" Then Worksheets("Sheet1").Range("A2:K2").Select
If UserForm1.TextBox1.Text = "" Then Worksheets("sheet1").Range("A2:K2").Value = ""
If UserForm1.TextBox2.Text = "" Then MsgBox "請輸入數量"

Unknown 說...

好怪.還是不行
還是問題是在EXCEL的設定裡面阿
我把文件貼上來.麻煩威廉先生有空在你的電腦上測試看看.
https://docs.google.com/leaf?id=0B5L5Q7qBnYPUNTliODY5OGUtMjY3NS00NmVkLTg1NjQtNjRmYmNiNTIyYTQy&hl=zh_TW&authkey=CLTS-9EE

最新回應

Loading...

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


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