查看完整版本: 圖書借閱系統借還書語法疑問
頁: [1]

zbc231 發表於 2017-1-22 02:28 AM

圖書借閱系統借還書語法疑問

本帖最後由 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>

zbc231 發表於 2017-1-23 03:56 PM

代碼如下: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-1-23 05:36 PM

本帖最後由 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>

zbc231 發表於 2017-1-24 12:47 AM

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: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
If A Is Nothing Then
   Msgbox "資料輸入錯誤"
Else
   A.Offset(, 3).Value = "書藉編號"
   A.Offset(, 4).Value = "書名"
   .
   .
   .
End If<br><br><br><br><br><div></div>

zbc231 發表於 2017-1-24 03:54 PM

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 = "書 ...

托你的福,已經完成了整個借書系統的製作,
再次感謝你的幫忙與指導!

zbc231 發表於 2017-2-2 08:53 AM

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 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 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-4 12:49 PM

本帖最後由 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>

zbc231 發表於 2017-2-4 05:00 PM

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

非常感謝你,系統已經完成。
感謝你的指導!

zbc231 發表於 2017-3-2 01:32 AM

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 11:59 AM

本帖最後由 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>

zbc231 發表於 2017-3-13 02:06 AM

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