Page 2 of 3
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 6:20 pm
by snasui
ผมปรับ Code มาให้ใหม่ตามด้านล่างครับ
Code สำหรับการให้เบอร์โต๊ะให้รวมการ Clear ชีท Temp ด้วย อันนี้สามารถปรับได้ตามเหมาะสม
Code: Select all
Private Sub UserForm_Initialize()
Dim i As Integer
Workbooks("ฐานข้อมูล.xlsx").Worksheets("Temp").Range("A2:H" & Rows.Count).ClearContents
For i = 1 To 50
FormMenu.cboTable.AddItem i
Next i
End Sub
Code เมื่อมีการเปลี่ยน txtF1
Code: Select all
Private Sub txtF1_Change()
Dim r As Range
Dim rTemp As Range
On Error Resume Next
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.Offset(-1, 0).EntireRow.ClearContents
Else
.lblF1.Caption = .txtF1.Text * Application.VLookup("ปลาทับทิมนึ่งมะนาว", r, 2, 0)
rTemp = "ปลาทับทิมนึ่งมะนาว"
rTemp.Offset(, 1) = txtF1.Text
rTemp.Offset(, 2) = .lblF1.Caption
rTemp.Offset(, -4) = FormMenu.lblDate.Caption
rTemp.Offset(, -3) = FormMenu.lblTime.Caption
rTemp.Offset(, -2) = FormMenu.cboTable.Text
rTemp.Offset(, -1) = FormMenu.txtMember.Text
End If
End With
End Sub
Code เมื่อกดปุ่ม OK
Code: Select all
Private Sub btnOK_Click()
Dim rs As Range
Dim rt As Range
Dim s As String
s = Application.Text(Date, "dดดดดbb")
With Workbooks("ฐานข้อมูล.xlsx").Worksheets("Temp")
Set rs = .Range("A2", .Range("A" & Rows.Count).End(xlUp).Offset(, 7))
End With
With Workbooks("ฐานข้อมูล.xlsx").Worksheets(s)
Set rt = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End With
rs.Copy
rt.PasteSpecial xlPasteValues
MsgBox "บันทึกรายการอาหารเรียบร้อยแล้ว"
Application.CutCopyMode = False
Unload Me
End Sub
ดูตัวอย่างตามไฟล์แนบครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sun Jul 31, 2011 9:18 pm
by zronous
ขอบคุณมากครับ สำหรับแนวคิด และตัวอย่าง
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Tue Aug 02, 2011 11:01 am
by zronous
อาจารย์ครับ ผมขอความคิดเห็นหน่อยครับ ว่าเมื่อเราบันทึกข้อมูลทั้งหมดลงในชีทตามวันที่นั้นๆ หากเราต้องการออกReportหรือบิลให้ลูกค้า เราควรจะอ้างอิงจากไหนหรอครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Tue Aug 02, 2011 2:50 pm
by snasui
การบันทึกข้อมูลลงฐานข้อมูลแบบแยกชีทนั้นยุ่งยากลำบากในการใช้งานครับ หากต้องการจะออกบิลหรือ Report ก็ต้องมาดูว่าเป็นของวันไหน ลูกค้ารายใด เพื่อจะได้ไปดึงข้อมูลมาถูกต้อง แต่การจะดูว่าขายให้ลูกค้ารายใดในวันไหนบ้างจะลำบากครับ ผมจึงแนะนำไว้ตามนี้เพื่อให้สะดวกแก่การนำข้อมูลไปใช้
snasui wrote:สำหรับข้อ 5 ไม่ควรเก็บข้อมูลแยกชีทครับ ควรทำเป็น Database เรียงกันไปเลย การจะเรียกดูข้อมูลในภายหลังเมื่อทำเป็น Database แล้วสามารถทำได้ง่ายมาก
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Tue Aug 02, 2011 9:12 pm
by zronous
ขอบคุณครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Tue Aug 02, 2011 9:16 pm
by zronous
zronous wrote:ถามหน่อยครับ โค้ดข้างล่างนี่เป็นโค้ดเรียกดูวันที่จากLabel แต่ต้องคลิกก่อนถึงจะโชว์วันที่ แต่ผมต้องการให้เปิดFormมาแล้วมันโชว์วันที่เลย ต้องแก้ตรงไหนครับ
Private Sub lblDate_Click()
FormMenu.lblDate = Date
End Sub
อีกข้อนึงครับ อยากจะให้Form ของเราเป็นแบบ Full scr เต็มจอ ต้องปรับที่ไหนครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Wed Aug 03, 2011 6:26 am
by snasui
กรณีต้องการให้ Userform เต็มจอ ระบุวันที่และเวลาสามารถปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Private Sub UserForm_Initialize()
Dim i As Integer
Workbooks("ฐานข้อมูล.xlsx").Worksheets("Temp").Range("A2:H" & Rows.Count).ClearContents
For i = 1 To 50
FormMenu.cboTable.AddItem i
Next i
Me.lblDate = Date
Me.lblTime = Time
With Application
Me.Width = .Width
Me.Height = .Height
Me.Top = .Top
Me.Left = .Left
End With
End Sub
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Wed Aug 03, 2011 12:33 pm
by zronous
ขอบพระคุณมากครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Wed Aug 03, 2011 2:20 pm
by zronous
ในไฟล์Form สั่งอาหารเมื่อบันทึกข้อมูล ข้อมูลทั้งหมดจะถูกเก็บใน ไฟล์รายงานประจำเดือน โดยเมื่อข้อมูลถูกบันทึกลงไป อยากให้ตรงช่อง I จะขึ้นข้อความว่า รอชำระเงิน
คือ จะมีกี่รายการก็ให้แสดงว่า รอชำระเงิน ทั้งหมดครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Wed Aug 03, 2011 7:39 pm
by snasui
เพิ่มบรรทัดนี้เข้าไปครับ
ตัวอย่าง Code จะได้เป็นตามด้านล่าง
Code: Select all
Private Sub txtB1_Change()
Dim r As Range
Dim rTemp As Range
On Error Resume Next
Set r = Workbooks("ฐานข้อมูล.xlsx").Worksheets( _
"อาหาร").Range("F2:G7")
Set rTemp = Workbooks("รายงานประจำเดือน.xlsx").Worksheets( _
"Temp").Range("E" & Rows.Count).End(xlUp).Offset(1, 0)
With FormMenu.MultiPage1.Pages("Page5")
If .txtB1 = "" Then
.lblB1 = ""
rTemp.Offset(-1, 0).EntireRow.ClearContents
Else
.lblB1.Caption = .txtB1.Text * Application.VLookup("เนื้อผัดพริกไทยดำ", r, 2, 0)
rTemp = "เนื้อผัดพริกไทยดำ"
rTemp.Offset(, 1) = txtB1.Text
rTemp.Offset(, 2) = .lblB1.Caption
rTemp.Offset(, 4) = "รอชำระเงิน"
rTemp.Offset(, -4) = FormMenu.lblDate.Caption
rTemp.Offset(, -3) = FormMenu.lblTime.Caption
rTemp.Offset(, -2) = FormMenu.cboTable.Text
rTemp.Offset(, -1) = FormMenu.txtMember.Text
End If
End With
End Sub
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Wed Aug 03, 2011 10:08 pm
by zronous
อาจารย์ครับ จากไฟล์ข้างบนผมอัพใหม่ให้แล้ว ในไฟล์Form ปุ่มเรียกดูข้อมูล
ผมต้องการ ดึงข้อมูลมาจากไฟล์ รายงานประจำเดือน.xlsx ชีทวันที่เครื่อง โดยที่ดูข้อมูลจาก เบอร์โต๊ะ วันที่ แล้วก็สถานะ รอชำระเงิน โดยอ้างอิงจาก3ข้อนี้ แล้วกดปุ่ม เรียกดู ข้อมูลทั้งหมด ก็จะโชว์ใน lblShow ครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Thu Aug 04, 2011 6:35 am
by snasui
ลองพยายามเขียน Code สำหรับ Case นี้มาดูก่อนครับ จะได้เห็นว่าได้พยายามแล้ว ติดขัดตรงไหนก็ค่อยมาถามต่อครับ ไม่เช่นนั้นก็จะกลายเป็นว่าให้ผมทำ Project หรือทำงานให้ ซึ่งไม่ควรจะเป็นเช่นนั้นครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Thu Aug 04, 2011 12:23 pm
by zronous
Private Sub btnShow_Click()
Dim s As String
s = Application.Text(Date, "dดดดดbb")
With Workbooks("รายงานประจำเดือน.xlsx").Worksheets(s)
.lblShow.caption = VLOOKUP(txtTable.caption, lblDate , ob1.caption)
End Sub
ประมาณนี้รึเปล่าครับ เรียกดูจาก รายงานประจำเดือน โดยเมื่อกรอกข้อมูลในช่อง txtTable และ คลิกที่ ob1 กดปุ่ม เรียกดู ก็จะโชว์ข้อมูลตามที่ต้องการ วันที่ เวลา โต๊ะ รายการอาหาร จำนวน ราคา
ถ้าเป็น Sql ก็จะ Select* form รายงานประจำเดือน Where โต๊ะ=txtTable , Date=lblDate , สถานะ=รอชำระเงิน
ช่วยทีครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Thu Aug 04, 2011 10:41 pm
by snasui
SQL กับ VBA มันคนละ Concept ครับ
ลักษณะความแตกต่างเปรียบเทียบเพื่อให้เห็นภาพชัด
SQL : ที่ตู้ A ต้องการกาแฟซองสีเขียว จะได้กาแฟพร้อมดื่ม
VBA : ไปที่ตู้ A, เปิดตู้ A, หยิบกาแฟซองสีเขียว, ฉีกซองกาแฟ, หยิบถ้วยกาแฟ, เทกาแฟใส่ถ้วย, นำถ้วยไปรองน้ำร้อน, กดน้ำร้อน, หยิบช้อน, คนกาแฟในถ้วย, ยกถ้วยกาแฟ, ดื่มกาแฟ
ผมปรับปรุงไฟล์มาให้ใหม่ ในไฟล์ Form เพิ่ม Sheet Temp เพื่อรองรับข้อมูล และใน Userform เปลี่ยน Label เป็น ListBox ลองดูไฟล์แนบประกอบครับ
Code: Select all
Private Sub btnShow_Click()
Dim rt As Range, rs As Range, rsall As Range
Dim s As String, RowSrc As String, rtp As Range
s = Application.Text(Date, "dดดดดbb")
Worksheets("Temp").Range("A:I").ClearContents
With Workbooks("รายงานประจำเดือน.xlsx").Worksheets(s)
Set rsall = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsall
If ob1.Value = True Then
If rs = CLng(Me.TextBox1) And CLng(rs.Offset(0, -2)) = CLng(Date) _
And rs.Offset(0, 6) = Me.ob1.Caption Then
Set rt = ThisWorkbook.Worksheets("Temp") _
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
rs.Offset(0, -2).Resize(1, 9).Copy
rt.PasteSpecial xlPasteValues
End If
ElseIf ob2.Value = True Then
If rs = CLng(Me.TextBox1) And CLng(rs.Offset(0, -2)) = CLng(Date) _
And rs.Offset(0, 6) = Me.ob2.Caption Then
Set rt = ThisWorkbook.Worksheets("Temp") _
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
rs.Offset(0, -2).Resize(1, 9).Copy
rt.PasteSpecial xlPasteValues
End If
End If
Next rs
With Worksheets("Temp")
Set rtp = .Range("A2", .Range("I" & Rows.Count).End(xlUp))
End With
RowSrc = "Temp!" & rtp.Address
Me.ListBox1.RowSource = RowSrc
End Sub
Private Sub UserForm_Initialize()
Me.lblDate = Date
Me.ListBox1.RowSource = ""
With Application
Me.Width = .Width
Me.Height = .Height
Me.Top = .Top
Me.Left = .Left
End With
End Sub
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Fri Aug 05, 2011 12:13 am
by scofiledz
สุดยอดเลย ครับ แนะเป็นแนวทางให้คนอื่น ทำเป็น Project ต่อได้เลย นะครับ
ชอบเว็ปนี้จริงๆ สู้ๆครับ อาจารย์ ^_^
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Fri Aug 05, 2011 12:20 am
by zronous
ขอบคุณมากครับ ผมจะลองทำดูครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Fri Aug 05, 2011 12:00 pm
by zronous
อาจารย์ครับผมงงมากเลย ผมสั่งอาหารวันที่จะเป็น 5/8/2554 แต่พอไปดูในรายงานประจำเดือนทำไมมันกลายเป็น 8/5/2554 อ่ะครับ
แล้วก็โค้ดข้างล่าง ตามที่อาจารย์ให้มา ผมแก้ยังไงมันก็ไม่สามารถเรียกดูข้อมูลได้ครับ หรืออาจจะเกี่ยวกับวันที่ข้างบนรึเปล่า
Private Sub btnShow_Click()
Dim rt As Range, rs As Range, rsall As Range
Dim s As String, RowSrc As String, rtp As Range
s = Application.Text(Date, "dดดดดbb")
Worksheets("Temp").Range("A:I").ClearContents
With Workbooks("รายงานประจำเดือน.xlsx").Worksheets(s)
Set rsall = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsall
If ob1.Value = True Then
If rs = CLng(Me.txtTable) And CLng(rs.Offset(0, -2)) = CLng(Date) _
And rs.Offset(0, 6) = Me.ob1.Caption Then
Set rt = ThisWorkbook.Worksheets("Temp") _
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
rs.Offset(0, -2).Resize(1, 9).Copy
rt.PasteSpecial xlPasteValues
End If
ElseIf ob2.Value = True Then
If rs = CLng(Me.txtTable) And CLng(rs.Offset(0, -2)) = CLng(Date) _
And rs.Offset(0, 6) = Me.ob2.Caption Then
Set rt = ThisWorkbook.Worksheets("Temp") _
.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
rs.Offset(0, -2).Resize(1, 9).Copy
rt.PasteSpecial xlPasteValues
End If
End If
Next rs
With Worksheets("Temp")
Set rtp = .Range("A2", .Range("I" & Rows.Count).End(xlUp))
End With
RowSrc = "Temp!" & rtp.Address
Me.ListBoxShow.RowSource = RowSrc
End Sub
Private Sub UserForm_Initialize()
Me.lblDate = Date
Me.ListBoxShow.RowSource = ""
With Application
Me.Width = .Width
Me.Height = .Height
Me.Top = .Top
Me.Left = .Left
End With
End Sub
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Fri Aug 05, 2011 12:18 pm
by snasui
zronous wrote:อาจารย์ครับผมงงมากเลย ผมสั่งอาหารวันที่จะเป็น 5/8/2554 แต่พอไปดูในรายงานประจำเดือนทำไมมันกลายเป็น 8/5/2554 ครับ
ลองไปตรวจสอบการตั้งค่าใน Regional and language ครับ สำหรับ Windows XP เข้าตามนี้ครับ
http://topicstock-tech.pantip.com/tech/ ... 600.html#6
ส่วน Code ที่ผมส่งไป
ก่อนที่จะโพสต์ตอบกระทู้ผมทดสอบแล้วทำงานได้ครับ สู้ ๆ เช่นกันครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Fri Aug 05, 2011 6:03 pm
by zronous
ครับ เดี๋ยวผมขอลองทำดูก่อนครับ
Re: รบกวนช่วยหน่อยครับ (กรอก Userform แล้ววางข้อมูลใน Databa
Posted: Sat Aug 06, 2011 3:19 pm
by scofiledz
ขอติดตามกระทู้นี้ครับ เป็นแนวในการสร้างโปรแกรม ขึ้นเองในบริษัทได้เลย