頁:
[1]
圖書借閱系統借還書語法疑問
本帖最後由 zbc231 於 2017-2-7 02:02 PM 編輯小弟因工作上的需求,需要建立簡單的圖書借閱管理系統,
目前構想及進度如下:
以建立借書登錄的表單,借出日期與應還日期已完成。重新填寫已完成,按下後會刪除編號及書籍編號。
書籍資料已完成。後方欲否逾期一覽表中目前日期也已設定,有逾期則顯示是,並變成紅底,
後方會自動計算天數;否則是綠底。
編號與姓名、書籍編號與書名的對應也已完成,輸入1得張3,輸入編號會跑出書名。
目前小弟不知如何按下新增紀錄後,上述資料會自動填入下方相對應的表格中,還書則會自動清空相對應的資料,
(編號與姓名的部分一直保留,不刪除)這部分的語法小弟也不會寫,希望大家能幫忙,謝謝大家!
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 代碼如下:Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With 工作表1
Set A = .Columns("A").Find(TextBox1.Text, lookat:=xlWhole)
TextBox2.Text = A.Offset(, 1)
End With
End Sub因為小弟對語法實在不懂,所以無法舉一反三,
請你幫忙解惑,謝謝! 本帖最後由 tryit244178 於 2017-2-4 01:51 PM 編輯
把你那串原始碼的第 2 行到第 5 行貼到增加的按鈕裡
然後把 TextBox2.Text = A.Offset(, 1) 改成
A.Offset(, 3).Value = "書藉編號"
A.Offset(, 4).Value = "書名"
A.Offset(, 5).Value = "借出日期"
A.Offset(, 6).Value = "應還日期"註:等號後面自已改成相對應的TextBox
而刪除鈕則是改成
A.Offset(, 3).Value = ""
A.Offset(, 4).Value = ""
A.Offset(, 5).Value = ""
A.Offset(, 6).Value = ""
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> tryit244178 發表於 2017-1-23 05:36 PM static/image/common/back.gif
把你那串原始碼的第 2 行到第 5 行貼到增加的按鈕裡
然後把 TextBox2.Text = A.Offset(, 1) 改成
註:等號 ...
感謝你的幫忙,目前借還書按鍵都能順利運作,
我也試著加入語句讓表格在按下借書鍵後能清空之前輸入的資料,
避免下一個人要先按清除資料才能借書。
也加入輸入後自動隱藏表格的功能。
但是目前有遇到另一個問題,
如果輸入表格中沒有的編號,會進入偵錯,
想寫else,但那是有if的狀況下才能用吧,
目前的寫法似乎無法用,
那要怎麼寫,才能再輸入不存在的編號時,
提醒他資料錯誤,請清除資料重新輸入呢?
再次感謝你的指導!
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 tryit244178 於 2017-1-24 02:37 AM 編輯
Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書藉編號" 就會出錯。A是Nothing呀!
那麼你該加入的判斷式就在這,要判斷A是不是Nothing
If A Is Nothing Then
Msgbox "資料輸入錯誤"
Else
A.Offset(, 3).Value = "書藉編號"
A.Offset(, 4).Value = "書名"
.
.
.
End If<br><br><br><br><br><div></div> tryit244178 發表於 2017-1-24 02:36 AM static/image/common/back.gif
Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書 ...
托你的福,已經完成了整個借書系統的製作,
再次感謝你的幫忙與指導! tryit244178 發表於 2017-1-24 02:36 AM static/image/common/back.gif
Set A = .Columns("A").Find(13, lookat:=xlWhole)
因為A沒找到值
所以下一行的 A.Offset(, 3).Value = "書 ...
不好意思,再請問一個問題,
本來在工作表1中公式是去搜尋編號,
然後將借書的資料寫入表格中。
我試著將搜尋的目標改成姓名,
結果就是什麼事都沒發生。
是因為在輸入視窗中,
姓名是輸入編號後帶出來的數值,
所以無法作為比對的依據嗎?...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 tryit244178 於 2017-2-3 07:07 AM 編輯
你要拿姓名來比對?
那…直接用TextBox2.Text不就好了。口。?
(TextBox2應該是姓名的吧)
本帖最後由 zbc231 於 2017-2-7 02:03 PM 編輯
tryit244178 發表於 2017-2-3 06:47 AM static/image/common/back.gif
你要拿姓名來比對?
那…直接用TextBox2.Text不就好了。口。?
(TextBox2應該是姓名的吧)
就是這樣子,我想把輸入編號得到的姓名作為比對的依據。
補充內容 (2017-2-4 07:33 AM):
問題解決了,
我把之前的程式碼中的set A,
改成set B後就正常運作了!
謝謝你抽空回復!
最後一個問題,為了統計借閱數量與使用狀況,
我新增了一個工作表2,
想將歸還時的資料儲存在工作表2後,
再將工作表1中之前的借書資料刪除,
還書表單內容的設置為輸入編號後,姓名、書籍編號和書名都是搜尋工作表1的內容自動填入的,
目前確認輸入的程式碼如下:
Private Sub CommandButton1_Click()
With 工作表1
Set B = .Columns("B").Find(TextBox2.Text, lookat:=xlWhole)
If B Is Nothing Then
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
Else
B.Offset(, 1).Value = ""
B.Offset(, 2).Value = ""
B.Offset(, 3).Value = ""
B.Offset(, 4).Value = ""
End If
End With
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
UserForm2.Hide
End Sub網路上教怎麼把textbox資料不覆蓋填入工作表的內容如下:
With 工作表2
If Range("A2") = "" Then
Range("A2") = TextBox1
Range("B2") = TextBox2
Range("C2") = TextBox3
Range("D2") = TextBox4
Range("E2") = TextBox5
Else
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.Offset(0, 0).Range("A1").Value = TextBox1
ActiveCell.Offset(0, 1).Range("A1").Value = TextBox2
ActiveCell.Offset(0, 2).Range("A1").Value = TextBox3
ActiveCell.Offset(0, 3).Range("A1").Value = TextBox4
ActiveCell.Offset(0, 4).Range("A1").Value = TextBox5
End If
End With
我把兩個合併再一起,結果運行後只會在工作表1最下方跑出,
我現在該怎麼改才能將資料出現在工作表2呢?
謝謝你的指導!
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 tryit244178 於 2017-2-8 10:21 AM 編輯
要出現在工作表2的話,把下面的程式碼改成 With 工作表2
.Activate
If .Range("A2").Value = "" Then
.Range("A2").Value = TextBox1.Text
.Range("B2").Value = TextBox2.Text
.Range("C2").Value = TextBox3.Text
.Range("D2").Value = TextBox4.Text
.Range("E2").Value = TextBox5.Text
Else
.Range("A" & Range("A1").CurrentRegion.Rows.Count + 1).Select ' 指定到空白行
ActiveCell.Offset(, 0).Value = TextBox1.Text
ActiveCell.Offset(, 1).Value = TextBox2.Text
ActiveCell.Offset(, 2).Value = TextBox3.Text
ActiveCell.Offset(, 3).Value = TextBox4.Text
ActiveCell.Offset(, 4).Value = TextBox5.Text
End If
End With...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div> tryit244178 發表於 2017-2-4 12:49 PM static/image/common/back.gif
要出現在工作表2的話,把下面的程式碼改成
非常感謝你,系統已經完成。
感謝你的指導! tryit244178 發表於 2017-2-4 12:49 PM static/image/common/back.gif
要出現在工作表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而已呢?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 tryit244178 於 2017-3-4 12:53 PM 編輯
zbc231 發表於 2017-3-2 01:32 AM static/image/common/back.gif
再次請問,照上述的寫法,
如A1中沒有資料,
textbox1-5將會被填入a2,b2,c2,d2,e2中,
把你原本的按鈕內的程式碼改為Private Sub CommandButton1_Click()
Dim i As Range
For Each i In 工作表2.Rows
If i.Columns(1).Value = "" Then
i.Columns(1).Value = TextBox1.Text
i.Columns(2).Value = TextBox2.Text
i.Columns(3).Value = TextBox3.Text
i.Columns(4).Value = TextBox4.Text
i.Columns(5).Value = TextBox5.Text
Exit For
End If
Next i
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
End Sub
這是判斷A欄位如果沒有值,就會寫入
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 感謝你的再次教導,
目前所有系統順利運作中。
看書學vba這件事,我會努力的!
頁:
[1]