Page 1 of 3
รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Database)
Posted: Sun Jul 24, 2011 12:20 pm
by zronous
1. ในไฟล์ที่แนบไปให้ Form.xlsm ผมต้องการให้ปุ่มสมัครสมาชิกกดเข้าไปได้ แล้วพอเวลากรอกเสร็จให้ข้อมูลทั้งหมดที่กรอกไป เข้าไปอยู่ในไฟล์ฐานข้อมูล.xlsm ชีทที่3 ชื่อรายชื่อสมาชิก ที่ผมแนบไปให้ทั้ง2ไฟล์นี้ครับ
2. ในไฟล์Form.xlsm กดเข้าไปที่ปุ่มรายการอาหาร แล้วคลิกที่โต๊ะอยากให้มันมีเบอร์โต๊ะให้เลือกอะครับ 1-50 โต๊ะ
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 5:58 pm
by snasui
ลองตามนี้ครับ
ที่ไฟล์ Form.xlsm
1. ที่ FormRegister เพิ่ม Code ตามด้านล่างครับ
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Range
Set r = Workbooks("ฐานข้อมูล.xlsx").Worksheets("รายชื่อสมาชิก").Range( _
"B" & Rows.Count).End(xlUp).Offset(1, 0)
r = FormRegister.TextBox1
r.Offset(, 1) = FormRegister.TextBox2
r.Offset(, 2) = FormRegister.TextBox3
r.Offset(, 3) = FormRegister.TextBox4
r.Offset(, 4) = FormRegister.TextBox5
r.Offset(, 5) = FormRegister.TextBox6
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
2. ที่ FormMenu เพิ่ม Code เป็นตามด้านล่างครับ
Code: Select all
Private Sub btnClose_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 50
FormMenu.cboTable.AddItem i
Next i
End Sub
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 7:56 pm
by zronous
ทำตามแล้วครับ แต่ว่าต้องใส่โค้ดอะไรที่ Module หรือป่าวเพราะกดปุ่มสมัครสมาชิกที่หน้าแรกไม่ได้อ่ะครับ แต่ปุ่มรายการอาหารกดได้ครับ
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 8:14 pm
by snasui
ต้อง Assigned Macro ให้กับปุ่มสมัครสมาชิกด้วยครับ
สำหรับที่ Module ปกติจะมี Code ตามด้านล่างครับ
Code: Select all
Sub openForm()
FormMenu.Show
End Sub
Sub Register()
FormRegister.Show
End Sub
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 8:19 pm
by zronous
ได้แล้วครับ
ปัญหาตอนนี้
1. ต้องการให้มันAutoรหัสสมาชิกขึ้นเองเช่น คนแรกรหัส V0001 พอสมัครคนต่อไปให้มันขึ้น V0002 ให้เองโดยอัตโนมัติ อ่ะครับ แล้วให้มันAutoรหัสสมาชิกไปเก็บไว้ในที่เดียวกัน คือในชีทรายชื่อสมาชิก ช่องA2ลงมาเรื่อยๆครับ
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 8:54 pm
by snasui
ผมทดสอบแล้วไม่มีปัญหา ดูภาพประกอบด้านล่างครับ ลองทดสอบ Assigned Macro ดูอีกรอบ
การบันทึกลงฐานข้อมูลจะต้องเปิดไฟล์ไว้ทั้งสองไฟล์ครับ
กรณีต้องการให้แสดงรหัสด้วย ช่วยเขียน Code มาดูก่อนครับ ติดขัดตรงไหนอย่างไรจะได้ช่วยกันดูต่อครับ
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 9:14 pm
by zronous
ให้มันแสดงรหัสผมก็ทำไม่เป็นอ่ะครับ รบกวนอาจารย์ช่วยหน่อยครับ
เช่น สมัครไปแล้ว ให้สมาชิกคนแรก รหัส Vooo1 คนต่อไปก็ให้เป็น Vooo2 Auto ไปเรื่อยๆอะครับ
Re: รบกวนช่วยหน่อยครับ
Posted: Sun Jul 24, 2011 10:52 pm
by snasui
ต้องขออภัยที่จะบอกว่า การใช้ VBA Code จำเป็นจะต้องปรับ VBA ได้บ้างครับ ไม่เช่นนั้นหากมีการเปลี่ยนแปลงเพียงเล็กน้อยจะแก้ไขเองไม่ได้ครับ
ตัวอย่างการปรับ Code ตามด้านล่างครับ
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Range
Set r = Workbooks("ฐานข้อมูล.xlsx").Worksheets("รายชื่อสมาชิก").Range( _
"B" & Rows.Count).End(xlUp).Offset(1, 0)
r = FormRegister.TextBox1
r.Offset(, 1) = FormRegister.TextBox2
r.Offset(, 2) = FormRegister.TextBox3
r.Offset(, 3) = FormRegister.TextBox4
r.Offset(, 4) = FormRegister.TextBox5
r.Offset(, 5) = FormRegister.TextBox6
If r.Row = 2 Then
r.Offset(0, -1) = "V0001"
Else
r.Offset(0, -1) = "V" & Application.Text(Right(r.Offset(-1, -1), 4) + 1, "0000")
End If
Unload Me
End Sub
Re: รบกวนช่วยหน่อยครับ
Posted: Tue Jul 26, 2011 2:33 pm
by zronous
ขอบคุณครับ
ช่วยดูให้ทีครับ
Posted: Sun Jul 31, 2011 1:31 am
by zronous
อยากให้ช่วยดังนี้ครับ
1. ในไฟล์Form.xlsm เข้าไปที่ปุ่มสั่งรายการอาหาร แล้วตรงที่วันที่กับเวลาเข้า อยากให้มันขึ้นวันที่กับเวลาให้เอง ตรงกับเวลาของเครื่องอ่ะครับ
2. ในไฟล์Form.xlsm เข้าไปที่ปุ่มสั่งอาหาร อยากให้รายการอาหารโชว์ราคาก็ต่อเมื่อใส่จำนวนเข้าไปซึ่งราคาอาหารทั้งหมดจะอยู่ในไฟล์ฐานข้อมูล.xlsm ถ้าไม่ได้ใส่จำนวนราคาก็จะไม่แสดง
3. ในไฟล์Form.xlsm เข้าไปที่ปุ่มสั่งอาหาร จากข้อ2 ซึ่งถ้าสั่งหลายรายการ ก็จะให้รวมราคาทั้งหมดโชว์ใน รวมยอดทั้งหมดซึ่งเป็นLabelข้างบนปุ่มOk
4. ในไฟล์Form.xlsm เข้าไปที่ปุ่มสั่งอาหาร จากข้อ1-3 เมื่อเราทำเสร็จทุกอย่างแล้ว เราใส่วันที่ เวลา เบอร์โต๊ะ ชื่อสมาชิก รายการอาหาร จำนวน ราคา ราคารวม เราต้องการให้ข้อมูลทั้งหมดไปเก็บไว้ในไฟล์ ฐานข้อมูล.xlsm ในชีทที่ตรงกับวันที่ในเครื่อง
5. จากข้อ4 เมื่อผ่านไปอีก1วัน ทำการสั่งรายการอาหารใหม่ ข้อมูลก็จะไปเก็บไว้ในชีทอันใหม่ซึ่งเป็นวันที่ของเครื่อง เช่น วันนี้วันที่31พอร้านปิด วันต่อมา วันที่1ข้อมูลอาหารที่เราสั่งก็จะถูกเก็บไว้ในไฟล์ฐานข้อมูล.xlsmในชีทวันที่ 1สิงหาคม เป็นต้น
ขอขอบพระคุณอาจารย์เป็นอย่างสูงครับ ผมอยากติดต่ออาจารย์จะสามารถติดต่อได้ทางไหนครับ อยากให้อาจารย์เป็นที่ปรึกษาครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 6:37 am
by snasui
ควรเขียน Code มาเองก่อนครับ ติดขัดตรงไหนก็ค่อยมาดูกันต่อ
สำหรับข้อ 5 ไม่ควรเก็บข้อมูลแยกชีทครับ ควรทำเป็น Database เรียงกันไปเลย การจะเรียกดูข้อมูลในภายหลังเมื่อทำเป็น Database แล้วสามารถทำได้ง่ายมาก
เรื่องเดียวกันควรถามต่อเนื่องกันไปครับ หากเปิดหัวข้อใหม่จะทำให้ติดตามเรื่องลำบาก
การเขียนชื่อกระทู้พยายามสื่อให้ถึงปัญหาเพื่อสะดวกในการ Search ของเพื่อน ๆ ครับ
สำหรับการเติมวันที่สามารถใช้ Date เข้ามาช่วยได้ครับ
เช่น Userform1.textbox1 = date
การเติมเวลาก็เช่นกัน สามารถใช้ Time เข้ามาช่วย
เช่น Userform1.textbox2 = time
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 11:32 am
by zronous
ขอบคุณครับสำหรับวันที่และเวลา ทำได้แล้วครับ
รบกวนช่วยเขียนโค้ดให้ดูเป็นตัวอย่างซักอันนึงได้มั้ยที่เหลือผมจะลองแก้เอง เช่น ใส่จำนวนในช่องปลาทับทิมนึ่งมะนาวแล้วให้ราคาปรากฏขึ้นมา ราคาจะเอามาจากในไฟล์ฐานข้อมูลครับ ช่วยเขียนมาให้ดูซักอันได้มั้ยหรือพอมีตัวอย่างที่คล้ายๆแบบของผมรึเปล่า
ตัวอย่างนะครับ
ช่องจำนวนปลาทับทิมนึ่งมะนาว = txtF1
โชว์ราคาปลาทับทิมนึ่งมะนาว = lblF1
โค้ด if txtF1 then
คำนวน txtF1*lblF1
ให้ lblF1 (โชว์ราคาจากไฟล์ฐานข้อมูล,ชีทอาหาร) ที่คำนวนแล้ว
else
lblF1 =""
ประมาณนี้ครับ
--------------------------------------------------------
จากนั้น ช่องรวมเงิน = lblTotal
ให้ lblTotal = lblF1+lblF2+lblF3+lblF4+lblF5+lblF6
lblTotal.show
ประมาณว่าเอาราคาของช่อง label ทั้งหมดมารวมกันแล้วมาโชว์ในช่อง lblTotal อ่ะครับ
ช่วยแก้ให้ทีครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 12:57 pm
by snasui
ผมทำตัวอย่างการแสดงราคาโดยอ้างอิง Label ปลาทับทิมนึ่งมะนาวมาให้ตามตัวอย่างด้านล่าง
Label กับชื่อในไฟลต้องเหมือนกันเป๊ะนะครับ เท่าที่ทดสอบปรากฏว่าต้องคีย์ค่าใน Label เข้าไปใหม่ ไม่เช่นนั้นจะค้นหากันไม่เจอและเกิดค่าผิดพลาด
สำหรับ Code ตามด้านล่างครับ
Code: Select all
Private Sub txtF1_Change()
Dim r As Range
Set r = Workbooks("ฐานข้อมูล.xlsx").Worksheets( _
"อาหาร").Range("B2:C8")
With FormMenu.MultiPage1.Pages("Page1")
If .txtF1 = "" Then
.lblF1 = ""
Else
.lblF1.Caption = .txtF1.Text * Application.VLookup(.Label46.Caption, r, 2, 0)
End If
End With
End Sub
กรณีที่คีย์ค่าลงใน TextBox ก็จะแสดงผลลัพธ์มาให้ หากลบค่าออกก็จะล้างค่าทิ้งให้
ส่วนยอดรวมลองเขียนมาเองก่อนครับ ติดตรงไหนก็มาช่วยกันดูต่อครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 1:36 pm
by zronous
ผมได้ลองเปลี่ยนขื่อ label46 เป็น ปลาทับทิมนึ่งมะนาว มันยังคงerror บรรทัดที่ไฮไลท์ให้ดูอ่ะครับ ต้องแก้ตรงไหนบ้างหรอครับ
Private Sub txtF1_Change()
Dim r As Range
Set r = Workbooks("°Ò¹¢éÍÁÙÅ.xlsx").Worksheets( _
"ÍÒËÒÃ").Range("B2:C8")
With FormMenu.MultiPage1.Pages("Page1")
If .txtF1 = "" Then
.lblF1 = ""
Else
.lblF1.Caption = .txtF1.Text * Application.VLookup(.ปลาทับทิมนึ่งมะนาว.Caption, r, 2, 0)
End If
End With
End Sub
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 1:43 pm
by snasui
zronous wrote:.lblF1.Caption = .txtF1.Text * Application.VLookup(.ปลาทับทิมนึ่งมะนาว.Caption, r, 2, 0)
ถ้าจะคีย์เข้าไปตรง ๆ ต้องปรับเป็นตามด้านล่างครับ
.lblF1.Caption = .txtF1.Text * Application.VLookup(
"ปลาทับทิมนึ่งมะนาว", r, 2, 0)
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 1:49 pm
by zronous
ขอบคุณมากครับ ได้แล้วครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 3:44 pm
by zronous
์อาจารย์ครับ ในไฟล์Form สั่งรายการอาหาร ตรงปุ่มOKครับ ผมทำให้มันบันทึกเบอร์โต๊ะ วันที่ เวลา ชื่อ ได้แล้วเหลือแต่ ในMultipage อ่ะครับอยากให้มันบันทึกรายการอาหารและจำนวน ราคา เฉพาะรายการที่มีการสั่งเท่านั้น เก้บไว้ในไฟล์ฐานข้อมูลครับ
โค้ดข้างล่างนี้สามารถบันทึก วันที่ เวลา ชื่อ เบอร์โต๊ะ แต่ รายการอาหาร จำนวน ราคา ยังทำไม่ได้ช่วยทีครับ
Private Sub btnOK_Click()
Dim d As Range
Set d = Workbooks("ฐานข้อมูล.xlsx").Worksheets("31กรกฏาคม54").Range( _
"B" & Rows.Count).End(xlUp).Offset(1, 0)
d = FormMenu.lblDate
d.Offset(, 1) = FormMenu.lblTime
d.Offset(, 2) = FormMenu.cboTable
d.Offset(, 3) = FormMenu.txtMember
MsgBox "บันทึกรายการอาหารเรียบร้อยแล้ว"
Unload Me
End Sub
แล้วตรงที่ไฮไลท์อยากให้มันเป็นชื่อชีทของวันที่เครื่องจะได้มั้ย
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 5:23 pm
by snasui
หากไม่มีคำอธิบายหรือคำถามเพิ่มเติมไม่ควรอ้างอิงคำพูดเดิมมาโพสต์ซ้ำครับ ที่โพสต์มาผมลบออกไปแล้ว
ชื่อของ Label เป็นภาษาอังกฤษดีอยู่แล้วครับ ถ้าจะเปลี่ยนควรเปลี่ยนที่ Caption การปรับชื่อเป็นภาษาไทยทำให้อ้างอิงยาก การจะให้กำหนดชื่อชีทตามวันที่นั้นสามารถกำหนดตาม Code ด้านล่างครับ แต่ชื่อชีทในไฟล์ ฐานข้อมูลควรเขียนให้ถูกต้องครับ 31กรกฎาคม54 ไม่ใช่ 31กรก
ฏาคม54 ตัวหลังคือ ฏ. ปฏัก ซึ่งไม่ถูกต้องครับ
Code: Select all
Private Sub btnOK_Click()
Dim d As Range
Dim s As String
s = Application.Text(Date, "dดดดดbb")
Set d = Workbooks("ฐานข้อมูล.xlsx").Worksheets(s).Range( _
"B" & Rows.Count).End(xlUp).Offset(1, 0)
d = FormMenu.lblDate
d.Offset(, 1) = FormMenu.lblTime
d.Offset(, 2) = FormMenu.cboTable
d.Offset(, 3) = FormMenu.txtMember
MsgBox "บันทึกรายการเรียบร้อยแล้ว"
Unload Me
End Sub
และกรณีต้องบันทึกรายการอาหาร จำนวนหน่วย ราคาเข้าไปในฐานข้อมูลด้วย ควรหาชีทชั่วคราวมารับข้อมูลก่อน เมื่อครบทุกรายการแล้วค่อยนำไปวางที่ชีท Database ต่อไป ในกรณีนี้ผมเพิ่มชีท Temp เข้ามาช่วย สำหรับ Code ที่ Page1 ปลาทับทิมนึ่งมะนาว จะปรับ Code เป็นตัวอย่างให้ตามด้านล่างครับ
Code: Select all
Private Sub txtF1_Change()
Dim r As Range
Dim rTemp As Range
Set r = Workbooks("ฐานข้อมูล.xlsx").Worksheets( _
"อาหาร").Range("B2:C8")
Set rTemp = Workbooks("ฐานข้อมูล.xlsx").Worksheets( _
"Temp").Range("E" & Rows.Count).End(xlUp).Offset(1, 0)
With FormMenu.MultiPage1.Pages("Page1")
If .txtF1 = "" Then
.lblF1 = ""
rTemp = ""
rTemp.Offset(, 1) = ""
rTemp.Offset(, 2) = ""
Else
.lblF1.Caption = .txtF1.Text * Application.VLookup("ปลาทับทิมนึ่งมะนาว", r, 2, 0)
rTemp = "ปลาทับทิมนึ่งมะนาว"
rTemp.Offset(, 1) = txtF1.Text
rTemp.Offset(, 2) = .lblF1.Caption
End If
End With
End Sub
ทั้งหมดที่ทำเป็นตัวอย่างให้นี้ยังไม่สมบูรณ์ แต่คิดว่าเป็นแนวทางให้ทำต่อได้ งานแบบนี้ไม่ง่ายนัก ผู้สร้างต้องมีความรู้เกี่ยวกับ VBA พอสมควรครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 5:42 pm
by zronous
ขอบคุณครับ ผมจะลองทำดูครับ
ได้ความรู้ดีครับ
Posted: Sun Jul 31, 2011 5:58 pm
by scofiledz
ได้ความรู้มากครับทำตามได้เลย ^^