伊莉討論區

標題: 圖書借閱系統借還書語法疑問 [打印本頁]

作者: zbc231    時間: 2017-1-22 02:28 AM     標題: 圖書借閱系統借還書語法疑問

本帖最後由 zbc231 於 2017-2-7 02:02 PM 編輯

小弟因工作上的需求,需要建立簡單的圖書借閱管理系統,
目前構想及進度如下:
以建立借書登錄的表單,借出日期與應還日期已完成。重新填寫已完成,按下後會刪除編號及書籍編號。
書籍資料已完成。後方欲否逾期一覽表中目前日期也已設定,有逾期則顯示是,並變成紅底,
後方會自動計算天數;否則是綠底。
編號與姓名、書籍編號與書名的對應也已完成,輸入1得張3,輸入編號會跑出書名。
目前小弟不知如何按下新增紀錄後,上述資料會自動填入下方相對應的表格中,還書則會自動清空相對應的資料,
(編號與姓名的部分一直保留,不刪除)這部分的語法小弟也不會寫,希望大家能幫忙,謝謝大家!





作者: zbc231    時間: 2017-1-23 03:56 PM

代碼如下:
  1. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  2. With 工作表1
  3. Set A = .Columns("A").Find(TextBox1.Text, lookat:=xlWhole)
  4. TextBox2.Text = A.Offset(, 1)
  5. End With
  6. End Sub
複製代碼
因為小弟對語法實在不懂,所以無法舉一反三,
請你幫忙解惑,謝謝!
作者: tryit244178    時間: 2017-1-23 05:36 PM

本帖最後由 tryit244178 於 2017-2-4 01:51 PM 編輯

把你那串原始碼的第 2 行到第 5 行貼到增加的按鈕裡
然後把 TextBox2.Text = A.Offset(, 1) 改成
  1. A.Offset(, 3).Value = "書藉編號"
  2. A.Offset(, 4).Value = "書名"
  3. A.Offset(, 5).Value = "借出日期"
  4. A.Offset(, 6).Value = "應還日期"
複製代碼
註:等號後面自已改成相對應的TextBox

而刪除鈕則是改成
  1. A.Offset(, 3).Value = ""
  2. A.Offset(, 4).Value = ""
  3. A.Offset(, 5).Value = ""
  4. A.Offset(, 6).Value = ""
複製代碼





作者: zbc231    時間: 2017-1-24 12:47 AM

tryit244178 發表於 2017-1-23 05:36 PM
把你那串原始碼的第 2 行到第 5 行貼到增加的按鈕裡
然後把 TextBox2.Text = A.Offset(, 1) 改成
註:等號 ...

感謝你的幫忙,目前借還書按鍵都能順利運作,
我也試著加入語句讓表格在按下借書鍵後能清空之前輸入的資料,
避免下一個人要先按清除資料才能借書。
也加入輸入後自動隱藏表格的功能。
但是目前有遇到另一個問題,
如果輸入表格中沒有的編號,會進入偵錯,
想寫else,但那是有if的狀況下才能用吧,
目前的寫法似乎無法用,
那要怎麼寫,才能再輸入不存在的編號時,
提醒他資料錯誤,請清除資料重新輸入呢?
再次感謝你的指導!


作者: tryit244178    時間: 2017-1-24 02:36 AM

本帖最後由 tryit244178 於 2017-1-24 02:37 AM 編輯

Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書藉編號" 就會出錯。A是Nothing呀!

那麼你該加入的判斷式就在這,要判斷A是不是Nothing
  1. If A Is Nothing Then
  2.    Msgbox "資料輸入錯誤"
  3. Else
  4.    A.Offset(, 3).Value = "書藉編號"
  5.    A.Offset(, 4).Value = "書名"
  6.    .
  7.    .
  8.    .
  9. End If
複製代碼

作者: zbc231    時間: 2017-1-24 03:54 PM

tryit244178 發表於 2017-1-24 02:36 AM
Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書 ...

托你的福,已經完成了整個借書系統的製作,
再次感謝你的幫忙與指導!
作者: zbc231    時間: 2017-2-2 08:53 AM

tryit244178 發表於 2017-1-24 02:36 AM
Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書 ...

不好意思,再請問一個問題,
本來在工作表1中公式是去搜尋編號,
然後將借書的資料寫入表格中。
我試著將搜尋的目標改成姓名,
結果就是什麼事都沒發生。
是因為在輸入視窗中,
姓名是輸入編號後帶出來的數值,
所以無法作為比對的依據嗎?
作者: tryit244178    時間: 2017-2-3 06:47 AM

本帖最後由 tryit244178 於 2017-2-3 07:07 AM 編輯

你要拿姓名來比對?
那…直接用TextBox2.Text不就好了。口。?
(TextBox2應該是姓名的吧)

作者: zbc231    時間: 2017-2-3 07:05 AM

本帖最後由 zbc231 於 2017-2-7 02:03 PM 編輯
tryit244178 發表於 2017-2-3 06:47 AM
你要拿姓名來比對?
那…直接用TextBox2.Text不就好了。口。?
(TextBox2應該是姓名的吧)

就是這樣子,我想把輸入編號得到的姓名作為比對的依據。


補充內容 (2017-2-4 07:33 AM):
問題解決了,
我把之前的程式碼中的set A,
改成set B後就正常運作了!
謝謝你抽空回復!
最後一個問題,為了統計借閱數量與使用狀況,
我新增了一個工作表2,
想將歸還時的資料儲存在工作表2後,
再將工作表1中之前的借書資料刪除,
還書表單內容的設置為輸入編號後,姓名、書籍編號和書名都是搜尋工作表1的內容自動填入的,
目前確認輸入的程式碼如下:
  1. Private Sub CommandButton1_Click()
  2. With 工作表1
  3. Set B = .Columns("B").Find(TextBox2.Text, lookat:=xlWhole)
  4. If B Is Nothing Then
  5.    TextBox1.Value = ""
  6. TextBox2.Value = ""
  7.     TextBox3.Value = ""
  8.     TextBox4.Value = ""
  9.     Else
  10. B.Offset(, 1).Value = ""
  11. B.Offset(, 2).Value = ""
  12. B.Offset(, 3).Value = ""
  13. B.Offset(, 4).Value = ""
  14. End If
  15. End With
  16. TextBox1.Value = ""
  17.      TextBox2.Value = ""
  18.     TextBox3.Value = ""
  19.      TextBox4.Value = ""
  20. UserForm2.Hide
  21. End Sub
複製代碼
網路上教怎麼把textbox資料不覆蓋填入工作表的內容如下:
  1. With 工作表2
  2. If Range("A2") = "" Then
  3. Range("A2") = TextBox1
  4. Range("B2") = TextBox2
  5. Range("C2") = TextBox3
  6. Range("D2") = TextBox4
  7. Range("E2") = TextBox5
  8. Else
  9. Range("A1").Select
  10. Selection.End(xlDown).Select
  11. ActiveCell.Offset(1, 0).Range("A1").Select
  12. ActiveCell.Offset(0, 0).Range("A1").Value = TextBox1
  13. ActiveCell.Offset(0, 1).Range("A1").Value = TextBox2
  14. ActiveCell.Offset(0, 2).Range("A1").Value = TextBox3
  15. ActiveCell.Offset(0, 3).Range("A1").Value = TextBox4
  16. ActiveCell.Offset(0, 4).Range("A1").Value = TextBox5
  17. End If
  18. End With
複製代碼

我把兩個合併再一起,結果運行後只會在工作表1最下方跑出,
我現在該怎麼改才能將資料出現在工作表2呢?
謝謝你的指導!


作者: tryit244178    時間: 2017-2-4 12:49 PM

本帖最後由 tryit244178 於 2017-2-8 10:21 AM 編輯

要出現在工作表2的話,把下面的程式碼改成
  1.     With 工作表2
  2.         .Activate
  3.         If .Range("A2").Value = "" Then
  4.             .Range("A2").Value = TextBox1.Text
  5.             .Range("B2").Value = TextBox2.Text
  6.             .Range("C2").Value = TextBox3.Text
  7.             .Range("D2").Value = TextBox4.Text
  8.             .Range("E2").Value = TextBox5.Text
  9.         Else
  10.             .Range("A" & Range("A1").CurrentRegion.Rows.Count + 1).Select   ' 指定到空白行
  11.             ActiveCell.Offset(, 0).Value = TextBox1.Text
  12.             ActiveCell.Offset(, 1).Value = TextBox2.Text
  13.             ActiveCell.Offset(, 2).Value = TextBox3.Text
  14.             ActiveCell.Offset(, 3).Value = TextBox4.Text
  15.             ActiveCell.Offset(, 4).Value = TextBox5.Text
  16.         End If
  17.     End With
複製代碼

作者: zbc231    時間: 2017-2-4 05:00 PM

tryit244178 發表於 2017-2-4 12:49 PM
要出現在工作表2的話,把下面的程式碼改成

非常感謝你,系統已經完成。
感謝你的指導!
作者: zbc231    時間: 2017-3-2 01:32 AM

tryit244178 發表於 2017-2-4 12:49 PM
要出現在工作表2的話,把下面的程式碼改成

再次請問,照上述的寫法,
如A1中沒有資料,
textbox1-5將會被填入a2,b2,c2,d2,e2中,
若有資料則填入a3,b3,c3,d3,e3中,依此類推。
那我後來有在f2,g2中加入新的判斷句,並且下拉到如F100,G100的位置,
後來在進行資料寫入時,原以為會輸入在a4,b4,c4,d4,e4的位置,
可是資料卻出現在a101,b101,c101,d101,e101的位置,
因為是F100,G100中,有判斷句的加入。
該怎麼修改上述語句,讓判斷填入位置是否有資料的依據,
僅限於a-e而已呢?

作者: tryit244178    時間: 2017-3-4 11:59 AM

本帖最後由 tryit244178 於 2017-3-4 12:53 PM 編輯
zbc231 發表於 2017-3-2 01:32 AM
再次請問,照上述的寫法,
如A1中沒有資料,
textbox1-5將會被填入a2,b2,c2,d2,e2中,

把你原本的按鈕內的程式碼改為
  1. Private Sub CommandButton1_Click()
  2.     Dim i As Range
  3.    
  4.     For Each i In 工作表2.Rows
  5.         If i.Columns(1).Value = "" Then
  6.             i.Columns(1).Value = TextBox1.Text
  7.             i.Columns(2).Value = TextBox2.Text
  8.             i.Columns(3).Value = TextBox3.Text
  9.             i.Columns(4).Value = TextBox4.Text
  10.             i.Columns(5).Value = TextBox5.Text
  11.             Exit For
  12.         End If
  13.     Next i

  14.     TextBox1.Text = ""
  15.     TextBox2.Text = ""
  16.     TextBox3.Text = ""
  17.     TextBox4.Text = ""
  18.     TextBox5.Text = ""
  19. End Sub
複製代碼

這是判斷A欄位如果沒有值,就會寫入


作者: zbc231    時間: 2017-3-13 02:06 AM

感謝你的再次教導,
目前所有系統順利運作中。
看書學vba這件事,我會努力的!




歡迎光臨 伊莉討論區 (http://s03.p05.eyny.com/) Powered by Discuz!