Page 1 of 1

อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Wed Jun 01, 2022 2:11 pm
by wisitsakbenz
เรียน อาจารย์ครับ

อยากให้ระบบมีการตรวจสอบข้อมูล โดย

- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 06.00 จะมีการคีย์ห้องได้แค่ 6 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 6 ห้องแล้ว"
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 07.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 4 ห้องแล้ว"
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 4 ห้องแล้ว"
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 09.00 จะมีการคีย์ห้องได้แค่ 5 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 5 ห้องแล้ว"
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 10.00 จะมีการคีย์ห้องได้แค่ 5 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 5 ห้องแล้ว"
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 11.00 จะมีการคีย์ห้องได้แค่ 6 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 6 ห้องแล้ว"
.
.
.
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 10/07/2022 เวลา 23.00 จะมีการคีย์ห้องได้แค่ 6 ห้อง ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า "มีการจองห้อง 6 ห้องแล้ว"

หมายเหตุ : ในแต่ละช่วงเวลาสามารถปรับเปลี่ยนการจองห้องได้ ว่าจะให้กี่ห้อง ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all


Sub Save()

Dim x As Integer
Dim r As Integer
    
If Application.Sum(Application.CountIfs(Sheets("Data").Columns("h"), Array("OR01", "OR02", "OR03", "OR04", "OR05", "OR06", "OR07", "OR08"), _
    Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
    Worksheets("Input").Range("b7"))) = 6 Then
    MsgBox ("มีการจองห้อง 6 ห้องแล้ว")
    Else
    If Application.CountIfs(Sheets("Data").Columns("h"), Worksheets("Input").Range("b5"), _
    Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
    Worksheets("Input").Range("b7")) > 0 Then
    x = MsgBox("มีการจองข้อมูลในห้อง วันและเวลาดังกล่าวแล้ว??", vbOKCancel, "แจ้งเตือน")
    Else
r = Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("Data").Cells(r, 1).Value = r - 1
Sheets("Data").Cells(r, 2).Value = Day(Date)
Sheets("Data").Cells(r, 3).Value = Month(Date)
Sheets("Data").Cells(r, 4).Value = Year(Date) - 2000
Sheets("Data").Cells(r, 5).Value = Sheets("Input").Range("B2").Value
Sheets("Data").Cells(r, 6).Value = Sheets("Input").Range("B3").Value
Sheets("Data").Cells(r, 7).Value = Sheets("Input").Range("B4").Value
Sheets("Data").Cells(r, 8).Value = Sheets("Input").Range("B5").Value
Sheets("Data").Cells(r, 9).Value = Sheets("Input").Range("B6").Value
Sheets("Data").Cells(r, 10).Value = Sheets("Input").Range("B7").Value
End If
End If
End Sub


Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Wed Jun 01, 2022 2:51 pm
by snasui
:D มีเขียนเงื่อนไขไว้ใน Code แล้วหรือไม่ว่าเวลาไหนมีห้องให้เลือกกี่ห้อง :?: หากยังกรุณาเขียนมาเองก่อน ติดตรงไหนค่อยนำมาถามกันต่อครับ

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Wed Jun 01, 2022 3:08 pm
by wisitsakbenz
เรียน อาจารย์ snasui

กำหนดครับ
เวลา
6.00 เลือกได้ 5 ห้อง
7.00 เลือกได้ 5 ห้อง
8.00 เลือกได้ 6 ห้อง
9.00 เลือกได้ 6 ห้อง
10.00 เลือกได้ 6 ห้อง
11.00 เลือกได้ 4 ห้อง
12.00 เลือกได้ 4 ห้อง
13.00 เลือกได้ 6 ห้อง
14.00 เลือกได้ 6 ห้อง
15.00 เลือกได้ 5 ห้อง
16.00 เลือกได้ 6 ห้อง
17.00 เลือกได้ 5 ห้อง
18.00 เลือกได้ 6 ห้อง
19.00 เลือกได้ 4 ห้อง
20.00 เลือกได้ 4 ห้อง
21.00 เลือกได้ 6 ห้อง
22.00 เลือกได้ 6 ห้อง
23.00 เลือกได้ 6 ห้อง

ต้องปรับ Code อย่างไรครับ อาจารย์ช่วยแนะนำหน่อยครับ ขอบคุณครับ

Code: Select all

If Application.Sum(Application.CountIfs(Sheets("Data").Columns("h"), Array("OR01", "OR02", "OR03", "OR04", "OR05", "OR06", "OR07", "OR08"), _
    Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
    Worksheets("Input").Range("b7"))) = 6 Then
    MsgBox ("มีการจองห้อง 6 ห้องแล้ว")
    Else

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Wed Jun 01, 2022 3:27 pm
by snasui
:D สามารถสร้างตัวแปรเพิ่มและใช้ Select Case เข้ามาช่วยได้ครับ

เช่น

Code: Select all

'Other code
Dim room As Integer    
    With Worksheets("Input")
        Select Case .Range("b7").Value
            Case 6
                room = 6
            Case 7, 8
               room = 4
            'Other code
        End Select
   End with

    If Application.Sum(Application.CountIfs(Sheets("Data").Columns("h"), Array("OR01", "OR02", "OR03", "OR04", "OR05", "OR06", "OR07", "OR08"), _
        Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
        Worksheets("Input").Range("b7"))) = room Then
'Other code
ศึกษา Select case ได้ที่นี่ครับ Select case

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Wed Jun 01, 2022 3:43 pm
by wisitsakbenz
เรียน อาจารย์ snasui

ได้แล้วครับ ขอบคุณมากครับอาจารย์

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Thu Jun 02, 2022 2:35 pm
by wisitsakbenz
เรียน อาจารย์

ถ้าต้องการปรับให้ระบบตรวจสอบ โดย
- ต้องการกำหนดให้ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง
ถ้ามากกว่านั้น ระบบจะมีข้อความขึ้นมาว่า
"มีการจองห้อง 4 ห้องแล้ว
คุณต้องการบันทึกข้อมูลเพิ่มอีกหรือไม่"
ถ้า Click OK ระบบจะทำการ Save ข้อมูล แต่ถ้า Cancel ระบบจะยกเลิก

หมายเหตุ : ในแต่ละเวลา สามารถบันทึกห้องเกินได้สูงสุด 7 ห้อง

ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

Code: Select all

'Other code
    If Application.Sum(Application.CountIfs(Sheets("Data").Columns("h"), Array("OR01", "OR02", "OR03", "OR04", "OR05", "OR06", "OR07", "OR08"), _
        Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
        Worksheets("Input").Range("b7"))) = room Then
    y = MsgBox("มีการจองห้องครบ " & room & " ห้องแล้ว" & Chr(10) & "คุณต้องการบันทึกข้อมูลเพิ่มอีกหรือไม่่?", vbOKCancel, "แจ้งเตือน")
        
    r = Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row + 1

Sheets("Data").Cells(r, 1).Value = r - 1
Sheets("Data").Cells(r, 2).Value = Day(Date)
Sheets("Data").Cells(r, 3).Value = Month(Date)
Sheets("Data").Cells(r, 4).Value = Year(Date) - 2000
Sheets("Data").Cells(r, 5).Value = Sheets("Input").Range("B2").Value
Sheets("Data").Cells(r, 6).Value = Sheets("Input").Range("B3").Value
Sheets("Data").Cells(r, 7).Value = Sheets("Input").Range("B4").Value
Sheets("Data").Cells(r, 8).Value = Sheets("Input").Range("B5").Value
Sheets("Data").Cells(r, 9).Value = Sheets("Input").Range("B6").Value
Sheets("Data").Cells(r, 10).Value = Sheets("Input").Range("B7").Value
    
    Else
    
    If Application.CountIfs(Sheets("Data").Columns("h"), Worksheets("Input").Range("b5"), _
    Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
    Worksheets("Input").Range("b7")) > 0 Then
    x = MsgBox("มีการจองข้อมูลในห้อง วันและเวลาดังกล่าวแล้ว??", vbOKCancel, "แจ้งเตือน")
   'Other code

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Thu Jun 02, 2022 6:13 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
        y = MsgBox("มีการจองห้องครบ " & room & " ห้องแล้ว" & Chr(10) & "คุณต้องการบันทึกข้อมูลเพิ่มอีกหรือไม่่?", vbYesNo, "แจ้งเตือน")
          
        If y = vbYes Then
            r = Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row + 1
        
            Sheets("Data").Cells(r, 1).Value = r - 1
            Sheets("Data").Cells(r, 2).Value = Day(Date)
            Sheets("Data").Cells(r, 3).Value = Month(Date)
            Sheets("Data").Cells(r, 4).Value = Year(Date) - 2000
            Sheets("Data").Cells(r, 5).Value = Sheets("Input").Range("B2").Value
            Sheets("Data").Cells(r, 6).Value = Sheets("Input").Range("B3").Value
            Sheets("Data").Cells(r, 7).Value = Sheets("Input").Range("B4").Value
            Sheets("Data").Cells(r, 8).Value = Sheets("Input").Range("B5").Value
            Sheets("Data").Cells(r, 9).Value = Sheets("Input").Range("B6").Value
            Sheets("Data").Cells(r, 10).Value = Sheets("Input").Range("B7").Value
        End If
'Other code

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Mon Jun 06, 2022 9:07 am
by wisitsakbenz
เรียน อาจารย์ snasui

ได้แล้วครับ แต่อยากเพิ่มเติมคือ ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง แต่ห้ามเกิน 7 ห้อง ต้องปรับ Code อย่างไรครับ ขอบคุณครับ

หมายเหตุ : ทุกเวลา สามารถบันทึกห้องเกินได้สูงสุด 7 ห้อง

Code: Select all

   Dim room As Integer
    With Worksheets("Input")
        Select Case .Range("b7").Value
            Case 6, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
               room = 6
            Case 7, 8
               room = 4
            Case 9
               room = 1
            Case 10
               room = 3
        End Select
   End With

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Mon Jun 06, 2022 11:33 am
by wisitsakbenz
เรียน อาจารย์

ติดปัญหาอีกอย่างคือ ในวันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง
เมื่อเพิ่มห้อง RO02 จะมี Message ขึ้นมาเตือน ถ้าเพิ่มห้องเป็น RO01 อีก จะไม่มี Message ขึ้นมาแจ้งเตือน ดังวีดีโอแนบ
รบกวนอาจารย์ด้วยครับ ขอบคุณครับ

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Tue Jun 07, 2022 6:30 am
by snasui
wisitsakbenz wrote: Mon Jun 06, 2022 9:07 am ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง แต่ห้ามเกิน 7 ห้อง
:D ลองทบทวนเงื่อนไขนี้อีกครั้ง เมื่อคีย์ได้แค่ 4 ห้อง มันจะมีโอกาสเกิน 4 เพื่อให้มีเงื่อนไขเพิ่มอีกว่า "ห้ามเกิน 7 ห้อง" ได้อีกหรือไม่ :?:
wisitsakbenz wrote: Mon Jun 06, 2022 9:07 am ในช่วงวันและเวลาเดียวกัน เช่น วันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง
วันที่ถูกเขียนเข้ามาเป็นเงื่อนไขเรียบร้อยแล้วใน Statement นี้

Application.Sum(Application.CountIfs(Sheets("Data").Columns("h"), Array("OR01", "OR02", "OR03", "OR04", "OR05", "OR06", "OR07", "OR08"), _
Sheets("Data").Columns("i"), Worksheets("Input").Range("b6"), Sheets("Data").Columns("j"), _
Worksheets("Input").Range("b7"))) = room Then


ส่วนของเงื่อนไขที่ใช้ตรวจสอบวันที่คือ Sheets("Data").Columns("i"), Worksheets("Input").Range("b6") ครับ
wisitsakbenz wrote: Mon Jun 06, 2022 11:33 am ติดปัญหาอีกอย่างคือ ในวันที่ 13/07/2020 เวลา 08.00 จะมีการคีย์ห้องได้แค่ 4 ห้อง
เมื่อเพิ่มห้อง RO02 จะมี Message ขึ้นมาเตือน ถ้าเพิ่มห้องเป็น RO01 อีก จะไม่มี Message ขึ้นมาแจ้งเตือน ดังวีดีโอแนบ
วิธีการตรวจสอบให้ทำการ Filter ข้อมูลใน Sheet Data ตามเงื่อนไขใน Sheet Input ด้วยมือแล้วชี้ให้เห็นว่าปัญหาคืออะไร ผลลัพธ์ควรเป็นอย่างไรประกอบมาด้วย จะได้เข้าถึงปัญหาโดยไวครับ

ควรติดตามให้ได้ว่า Code บรรทัดไหนให้ผลผิดพลาด ค่าที่ถูกต้องควรเป็นเท่าใดและ Code ได้ค่าเป็นเท่าใด

การใช้ Code จะต้อง Debug ทีละบรรทัดให้เป็นวิธีการคือ คลิกที่ Procedure นั้น ๆ แล้วกดแป้น F8 ไปเรื่อย ๆ สังเกตการทำงานว่าถูกต้องตามที่ต้องการหรือไม่ หากบรรทัดไหนทำงานไม่ตรงกับที่ต้องการจะได้ทราบได้ทันที

หากต้องการจะ Break code โดยให้รันมาถึงบรรทัดใด ๆ แล้วหยุด ให้ดูคำอธิบายในโพสต์นี้ประกอบครับ viewtopic.php?f=3&t=17483&p=103247#p103247

Re: อยากให้ระบบมีการตรวจสอบข้อมูล

Posted: Tue Jun 07, 2022 11:14 am
by wisitsakbenz
เรียน อาจารย์ snasui

ขอบคุณอาจารย์ที่แนะนำครับ ขอศึกษาก่อนนะครับ
ขอบคุณครับ