Page 1 of 2

สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA ครับ

Posted: Wed Apr 09, 2014 4:47 pm
by narin_han
EX.Training.xlsm
(33.48 KiB) Downloaded 23 times
สวัสดีครับ
เนื่องจากผมจะพัฒนางานผมโดยการสร้างแบบฟอร์มใน VBA แล้วให้ลงข้อมูลในบรรทัดด้านล่างที่มีข้อมุลล่าสุด ก็หาข้อมูลจากในนี้นะครับ
จนสามารถเขียนได้เกือบจนหมดแต่ติดตรงปัญหาอย่างเดียวนะครับ ที่พยายามเท่าไหร่ก็ไม่ได้สักที ปัญหาก้คือว่า

เนื่องจากจะกรอกข้อมูลผู้เข้ารับการอบรมในช่วงเวลา 3 ปีนะครับ คือ 2014-2016
ซึ่งในแต่ละหัวข้ออบรมจะมีทั้งหมด 5 คอร์สด้วยกัน และแต่ละคอร์สจะต้องลง status ดังนี้
Done = เรียบร้อยแล้ว
Q1P-Q4P = จะอบรมในแต่ละควอเตอร์ตาม Plan
Q1C-Q4C = จะอบรมในแต่ละควอเตอร์ตามที่ได้ Confirmed กันแล้ว
แต่ละ Status จะกำหนด Condition format ด้วยตามสีที่กำหนดไว้แล้ว

แต่ปัญหาก็คือว่า ในปี 2014 ถ้าคอร์สใดที่ขึ้นว่า Done แล้วในปีนี้ อยากให้ ในปีถัดไปคือ 2015 และ 2016 ขึ้นโดยอัตโนมัตินะครับ
ทีนี้ตอนแรกผมกำหนดสูตร ใน excel โดยตรงเลยครับ เช่น

IF(E6="Done","Done","") แต่พอ test ไปแล้วปรากฏว่าช่องไหนที่ขึ้น Done ให้ขึ้นให้จริง แต่ข้อมูลใหม่ที่ไม่ใช่ Done ไม่ได้ลงไปนะครับ
พอจะใช้สูตร IF ก็เกิน 7 เงื่อนไขนะครับ พยายามอ่านจากที่อื่นแล้ว ก็ไม่มีอันไหนที่จะ apply ได้เลยครับ ฝากด้วยนะครับ
ทั้งนี้ผมได้แนบไฟล์แนบมาด้วยนะครับ

ขอบคุณครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Wed Apr 09, 2014 5:45 pm
by bank9597
narin_han wrote:
EX.Training.xlsm
สวัสดีครับ
เนื่องจากผมจะพัฒนางานผมโดยการสร้างแบบฟอร์มใน VBA แล้วให้ลงข้อมูลในบรรทัดด้านล่างที่มีข้อมุลล่าสุด ก็หาข้อมูลจากในนี้นะครับ
จนสามารถเขียนได้เกือบจนหมดแต่ติดตรงปัญหาอย่างเดียวนะครับ ที่พยายามเท่าไหร่ก็ไม่ได้สักที ปัญหาก้คือว่า

เนื่องจากจะกรอกข้อมูลผู้เข้ารับการอบรมในช่วงเวลา 3 ปีนะครับ คือ 2014-2016
ซึ่งในแต่ละหัวข้ออบรมจะมีทั้งหมด 5 คอร์สด้วยกัน และแต่ละคอร์สจะต้องลง status ดังนี้
Done = เรียบร้อยแล้ว
Q1P-Q4P = จะอบรมในแต่ละควอเตอร์ตาม Plan
Q1C-Q4C = จะอบรมในแต่ละควอเตอร์ตามที่ได้ Confirmed กันแล้ว
แต่ละ Status จะกำหนด Condition format ด้วยตามสีที่กำหนดไว้แล้ว

แต่ปัญหาก็คือว่า ในปี 2014 ถ้าคอร์สใดที่ขึ้นว่า Done แล้วในปีนี้ อยากให้ ในปีถัดไปคือ 2015 และ 2016 ขึ้นโดยอัตโนมัตินะครับ
ทีนี้ตอนแรกผมกำหนดสูตร ใน excel โดยตรงเลยครับ เช่น

IF(E6="Done","Done","") แต่พอ test ไปแล้วปรากฏว่าช่องไหนที่ขึ้น Done ให้ขึ้นให้จริง แต่ข้อมูลใหม่ที่ไม่ใช่ Done ไม่ได้ลงไปนะครับ
พอจะใช้สูตร IF ก็เกิน 7 เงื่อนไขนะครับ พยายามอ่านจากที่อื่นแล้ว ก็ไม่มีอันไหนที่จะ apply ได้เลยครับ ฝากด้วยนะครับ
ทั้งนี้ผมได้แนบไฟล์แนบมาด้วยนะครับ

ขอบคุณครับ
:D ระบุถึงโค๊ดที่มีปัญหาเลยครับ จะได้เข้าถึงปัญหาได้รวดเร็วขึ้น

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Wed Apr 09, 2014 6:08 pm
by narin_han
ขอบคุณมากนะครับ คุณ bank9597

Code: Select all

Private Sub CommandButton1_Click()

   Dim rw As Long    'next available row
 
   With Sheets("Sheet1")
 
      'get the next avialable row in Sheet1
      rw = .Range("A" & .Rows.Count).End(xlUp).Row + 1
      
      'put the text box values in this row
      
      .Range("A" & rw).Value = TextBox1.Value
      .Range("B" & rw).Value = TextBox2.Value
      .Range("C" & rw).Value = TextBox3.Value
      .Range("D" & rw).Value = ComboBox19.Value
      .Range("E" & rw).Value = ComboBox1.Value
      .Range("F" & rw).Value = ComboBox2.Value
      .Range("G" & rw).Value = ComboBox3.Value
      .Range("H" & rw).Value = ComboBox5.Value
      .Range("I" & rw).Value = ComboBox6.Value
      .Range("J" & rw).Value = ComboBox8.Value
      .Range("K" & rw).Value = ComboBox9.Value
      .Range("L" & rw).Value = ComboBox10.Value
      .Range("M" & rw).Value = ComboBox12.Value
      .Range("N" & rw).Value = ComboBox7.Value
      .Range("O" & rw).Value = ComboBox14.Value
      .Range("P" & rw).Value = ComboBox15.Value
      .Range("Q" & rw).Value = ComboBox16.Value
      .Range("R" & rw).Value = ComboBox18.Value
      .Range("S" & rw).Value = ComboBox13.Value
      
   'copy the formula from the previous row
      .Range("J" & rw - 1 & ":H" & rw - 1).Copy
     .Range("J" & rw & ":H" & rw).PasteSpecial Paste:=xlPasteFormulas
      Application.CutCopyMode = False
   
      
   End With

End Sub
โค๊ดที่ผมลองทำคือแบบนี้นะครับ แต่ไฟล์จริงของผมได้ใส่สุตรลงไปใน excel ครับ ตามนี้ครับ

คือในช่อง J6 K6 และ O6 P6 ขึ้นตามครับ แต่ STATUS อื่นไม่ขึ้นตามที่กรอกครับ เป็นว่างไปเลยครับ

ฝากรบกวนดูให้ด้วยนะครับ หรือมีทางเลือกอะไรอีกไหมนะครับ

ขอบคุณครับ พร้อมแนบไฟล์แนบใหม่ครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Wed Apr 09, 2014 8:52 pm
by narin_han
ขอแก้ไข code นะครับ

Code: Select all

Private Sub CommandButton1_Click()

   Dim rw As Long    'next available row
 
   With Sheets("Sheet1")
 
      'get the next avialable row in Sheet1
      rw = .Range("A" & .Rows.Count).End(xlUp).Row + 1
      
      'put the text box values in this row
      
      .Range("A" & rw).Value = TextBox1.Value
      .Range("B" & rw).Value = TextBox2.Value
      .Range("C" & rw).Value = TextBox3.Value
      .Range("D" & rw).Value = ComboBox19.Value
      .Range("E" & rw).Value = ComboBox1.Value
      .Range("F" & rw).Value = ComboBox2.Value
      .Range("G" & rw).Value = ComboBox3.Value
      .Range("H" & rw).Value = ComboBox5.Value
      .Range("I" & rw).Value = ComboBox6.Value
      .Range("J" & rw).Value = ComboBox8.Value
      .Range("K" & rw).Value = ComboBox9.Value
      .Range("L" & rw).Value = ComboBox10.Value
      .Range("M" & rw).Value = ComboBox12.Value
      .Range("N" & rw).Value = ComboBox7.Value
      .Range("O" & rw).Value = ComboBox14.Value
      .Range("P" & rw).Value = ComboBox15.Value
      .Range("Q" & rw).Value = ComboBox16.Value
      .Range("R" & rw).Value = ComboBox18.Value
      .Range("S" & rw).Value = ComboBox13.Value
      
   'copy the formula from the previous row
      .Range("J" & rw - 1 & ":S" & rw - 1).Copy
     .Range("J" & rw & ":S" & rw).PasteSpecial Paste:=xlPasteFormulas
      Application.CutCopyMode = False
   
      
   End With

End Sub
และสุตรที่ใช้ใน J6 คือ
=IF(E6="Done","Done",J6) ต่อเนื่องไปถึง column S นะครับ

ขอบคุณครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Wed Apr 09, 2014 11:16 pm
by bank9597
:) ผมอ่านโจทย์แล้วยังไม่เข้าใจหรอกครับ เพราะว่ายาวเกินไป แต่พอจะเข้าใจได้ว่า คุณต้องการบันทึกข้อมูลจากฟอร์ม มาลงในเวิร์คชีท ต่อลงไปเรื่อยๆ ตามช่วงปีที่กำหนด ใช่หรือไม่ครับ

ซึ่งปัญหาที่คุณเจอคือ ข้อมูลมาบันทึกไม่ได้ตามที่หวังไว้ ใช่หรือไม่

หากผทเข้าใจถูกต้องแล้ว ยังมีเงื่อนไขใดอีกหรือไม่ ที่จะใช้ในการสั่งบันทึกข้อมูล รบกวนแจ้งอีกครั้งครับ

เดี๋ยวยังไง ผมจะลองทำความเข้าใจงานของคุณก่อนครับ :mrgreen:

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Wed Apr 09, 2014 11:26 pm
by narin_han
bank9597 wrote::) ผมอ่านโจทย์แล้วยังไม่เข้าใจหรอกครับ เพราะว่ายาวเกินไป แต่พอจะเข้าใจได้ว่า คุณต้องการบันทึกข้อมูลจากฟอร์ม มาลงในเวิร์คชีท ต่อลงไปเรื่อยๆ ตามช่วงปีที่กำหนด ใช่หรือไม่ครับ

ซึ่งปัญหาที่คุณเจอคือ ข้อมูลมาบันทึกไม่ได้ตามที่หวังไว้ ใช่หรือไม่

หากผทเข้าใจถูกต้องแล้ว ยังมีเงื่อนไขใดอีกหรือไม่ ที่จะใช้ในการสั่งบันทึกข้อมูล รบกวนแจ้งอีกครั้งครับ

เดี๋ยวยังไง ผมจะลองทำความเข้าใจงานของคุณก่อนครับ :mrgreen:
ขอบคุณอีกครั้งนะครับ คุณ bank9597 ขออธิบายเพิ่มเติมนะครับ

1. ใช่ครับ ผมต้องการบันทึกข้อมูลสำหรับผู้ที่จะอบรมมาใหม่ในช่วง 3 ปีนี้ครับ (แต่จะมี database ก่อนหน้านั้น 500 items ครับ) ซึ่งก็คือจะเริ่มที่ row 501 ครับ
2. ใช่ครับ ข้อมูลบันทึกไม่ได้ตามเงื่อนไขครับ เงื่อนไขมีแค่เงื่อนเดียวเองครับ คือ
ในช่วง 2004 ที่มี 5 course ถ้าช่องใดลงสถานะว่า Done ให้สถานะนี้ในปีถัดไปขึ้น Done ด้วยครับในช่องเดียวกัน ส่วนสถานะอื่นตามที่จะลงจากการกรอกตามฟอร์มครับ
3. ผมลองทำแล้ว ปรากฏว่า ข้อมูล show done ได้ แต่ไม่ลงสถานะอื่นครับ (ถ้าเอาสูตรลงใน excel ครับ) แต่ถ้าใน code vba ไม่ลงให้บรรทัดใหม่ที่ add มามีสูตรตามนั้น condition format ที่กำหนดสีก็จะไม่เป็นไปตามนั้นครับ

ปล. ความจริงฟอรืมของจริงมีหลายเงื่อนไขอีกครับ แต่ที่ผมติดจริงๆมีอันนี้อันเดียวนะครับ พยายามแล้วก็ไม่ได้สักทีครับ

ขอบคุณครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 12:07 am
by bank9597
:D ผมเขียนโค๊ดให้ใหม่ครับ ตามที่ผมเรียนรู้มา

1. คุณควรสร้างตารางเก็บข้อมูล Course และ Country เพื่อเป็นฐานข้อมูลและนำค่าไปใช้ใน combobox rowsource โดยการสร้าง Range Name หรือใช้ใช้วิธีอื่นก็ได้ แต่วิธีนี้ง่ายที่สุด

2. คุณต้องสร้างชีท temp เพื่อจัดระเบียบข้อมูลให้อยู่ในรูปแบบที่พร้อมก่อนสั่งไปบันทึกในชีทปลายทาง

3. คุณต้องใช้ If ในการเขียนโค๊ดเพื่อกำหนดเงื่อนไขดังกล่าวครับ

ผมได้ทำตัวอย่างไว้ให้แล้ว ตามไฟล์แนบ ซึ่งผมได้ทำตัวอย่างไว้แค่ 1 ตัวอย่าง คือ เมื่อ course1 ปี 14 เป็น Done แล้ว ใน course1 ปี 15 ก็จะเป็น Done ด้วย
คุณสามารถทำความเข้าใจโค๊ดได้ แล้วนำไปปรับใช้ทำต่อจนสมบูรณ์ได้ครับ

Code: Select all

Private Sub ComboBox8_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("E2") = "Done" Then
            ws.Range("J2") = "Done"
        Else
            ws.Range("J2") = Me.ComboBox8
        End If
        Set ws = Nothing
End Sub

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 12:29 am
by narin_han
:cp: :cp: :cp: :cp:

ขอบคุณคุณ bank9597 อีกครั้งนะครับ
ผมเข้าใจ concept แล้วนะครับ เดี๋ยวจะนำไปประยุกตืใช้นะครับ
เนื่องจากนี่เป็นการเขียนครั้งแรกด้วยนะครับ เลยเปิดจากเน็ตแล้วลองเขียนดูนะครับ

ยังไงพรุ่งนี้จะลองนำมาประยุกต์แล้วจะแจ้งให้ทราบอีกทีนะครับ

ปล.อยากสอบถามเพิ่มนะครับว่า ต้องตั้งชื่อ sheet temp ไว้ทำไมนะครับ
รู้สึกว่าเหมือนให้ส่งค่าไปที่ sheet temp ก่อนแล้วค่อยไป paste ที่ sheet1 ใช่ไหมครับ?
แต่คำสั่งนี้เร็วมากครับ เยี่ยมเลยครับ

:D :D :D :D :D :D

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 12:44 am
by bank9597
ปล.อยากสอบถามเพิ่มนะครับว่า ต้องตั้งชื่อ sheet temp ไว้ทำไมนะครับ
รู้สึกว่าเหมือนให้ส่งค่าไปที่ sheet temp ก่อนแล้วค่อยไป paste ที่ sheet1 ใช่ไหมครับ?
:D ใช่แล้วครับ เป็นการจัดรับระเบียบข้อมูลก่อนการบันทึกครับ โดยใช้ชีท temp เป็นตัวรับค่าจากการคีย์บน userform มาจัดเรียงก่อน เพื่อให้ง่ายต่อการเขียนโค๊ดไปวางยังชีทเป้าหมายครับ

ที่ผมเขียนโคีดการกำหนดเงื่อนไขด้วย if ไปให้นั้น ยังไม่รัดกุมครับ ยังไงต้องลองปรับดูน่ะครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 4:19 pm
by narin_han
bank9597 wrote:
ปล.อยากสอบถามเพิ่มนะครับว่า ต้องตั้งชื่อ sheet temp ไว้ทำไมนะครับ
รู้สึกว่าเหมือนให้ส่งค่าไปที่ sheet temp ก่อนแล้วค่อยไป paste ที่ sheet1 ใช่ไหมครับ?
:D ใช่แล้วครับ เป็นการจัดรับระเบียบข้อมูลก่อนการบันทึกครับ โดยใช้ชีท temp เป็นตัวรับค่าจากการคีย์บน userform มาจัดเรียงก่อน เพื่อให้ง่ายต่อการเขียนโค๊ดไปวางยังชีทเป้าหมายครับ

ที่ผมเขียนโคีดการกำหนดเงื่อนไขด้วย if ไปให้นั้น ยังไม่รัดกุมครับ ยังไงต้องลองปรับดูน่ะครับ
ขอบคุณอีกครั้งครับ แต่เกิดปัญหาอีกแล้วครับ ตาม code ที่ผมเขียนเต็มๆแล้วนะครับ

Code: Select all


Private Sub ComboBox8_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("E2") = "Done" Then
            ws.Range("J2") = "Done"
        Else
            ws.Range("J2") = Me.ComboBox8
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox9_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("F2") = "Done" Then
            ws.Range("K2") = "Done"
        Else
            ws.Range("K2") = Me.ComboBox9
        End If
        Set ws = Nothing
End Sub

Private Sub ComboBox10_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("G2") = "Done" Then
            ws.Range("L2") = "Done"
        Else
            ws.Range("L2") = Me.ComboBox10
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox11_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("H2") = "Done" Then
            ws.Range("M2") = "Done"
        Else
            ws.Range("M2") = Me.ComboBox11
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox7_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("I2") = "Done" Then
            ws.Range("N2") = "Done"
        Else
            ws.Range("N2") = Me.ComboBox7
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox14_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("J2") = "Done" Then
            ws.Range("O2") = "Done"
        Else
            ws.Range("O2") = Me.ComboBox14
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox15_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("K2") = "Done" Then
            ws.Range("P2") = "Done"
        Else
            ws.Range("P2") = Me.ComboBox15
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox16_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("L2") = "Done" Then
            ws.Range("Q2") = "Done"
        Else
            ws.Range("Q2") = Me.ComboBox16
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox17_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("M2") = "Done" Then
            ws.Range("R2") = "Done"
        Else
            ws.Range("R2") = Me.ComboBox17
        End If
        Set ws = Nothing
End Sub
Private Sub ComboBox13_Change()
        Dim ws As Worksheet
        Set ws = Worksheets("temp")
        If ws.Range("N2") = "Done" Then
            ws.Range("S2") = "Done"
        Else
            ws.Range("S2") = Me.ComboBox13
        End If
        Set ws = Nothing
End Sub
เกิดปัญหาตั้งแต่ ComboBox8 นะครับหลังจากเขียนครบทุก ComboBox
ปรากฏว่า Done ในปีอื่นๆไม่ลงข้อมูลตามให้ครับ แต่อย่างอื่นได้หมดแล้ว :cry: :cry:

โดยผมตั้ง Logic แบบนี้คือ

ถ้า ComboBox1 (ตำแหน่ง E2) ในปี 2014 = Done แล้ว Then ComboBox8 (ตำแหน่ง J2) = Done ด้วย

แล้วไปสร้างในปี 2016 ต่อนะครับ ว่า ComboBox8 (ตำแหน่ง J2) ในปี 2015 = Done แล้ว Then ComboBox14 (ตำแหน่ง O2) = Done ด้วย (ที่สร้างเงื่อนไขแบบนี้ เพราะเผื่อในปี 2015 ด้วยนะครับว่ามี Done แต่ปี 2014 ไม่ต้องมีก็ได้ครับ)

ตามไฟล์แนบ บันทัดล่างสุดครับ Done ไม่เปลี่ยนครับ ฝากดูให้หน่อยนะครับ ว่าต้องแก้คำสั่ง If Then ยังไงครับ ขอบคุณครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 5:07 pm
by bank9597
:D ลองแนบไฟล์มาดูด้วยครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 5:11 pm
by narin_han
ผมแนบมาแล้วครับ คุณ bank9597

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 5:31 pm
by narin_han
คุณ bank9597 ครับ
เพิ่มเติมครับ ทีแรกผมคิดว่าผม copy code มาผิด
เลยไปดูจากไฟล์เก่าที่คุณ bank9597 คิดไว้ให้เมื่อคืน
ปรากฎว่า พอ เลือก done ในช่อง course 1 ปี 2014 ปรากฏว่า Done ในปี 2015 course 1 ก็ไม่แสดงออกมาครับ
แต่เมื่อคืนก่อนนอนผม test ได้แล้ว ยังงงๆอยู่ครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 6:26 pm
by narin_han
ฝากขอถามถึงอาจารย์ด้วยนะครับ
ขอบคุณครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 6:36 pm
by bank9597
narin_han wrote:คุณ bank9597 ครับ
เพิ่มเติมครับ ทีแรกผมคิดว่าผม copy code มาผิด
เลยไปดูจากไฟล์เก่าที่คุณ bank9597 คิดไว้ให้เมื่อคืน
ปรากฎว่า พอ เลือก done ในช่อง course 1 ปี 2014 ปรากฏว่า Done ในปี 2015 course 1 ก็ไม่แสดงออกมาครับ
แต่เมื่อคืนก่อนนอนผม test ได้แล้ว ยังงงๆอยู่ครับ
:D ผมยังไม่ได้เห็นไฟล์แนบครับ

เมื่อคืนที่ตอบไป ยังไม่รัดกุมครับ เนื่องจากเงื่อนไขยังไม่ชัดเจน

ถ้าเปิดฟอร์มขึ้นมาแล้ว เรากรอกช่วง ปี 15 ก่อนปี 14 จะให้ข้อมูลแสดงอย่างไร นี่แค่ส่วนหนึ่ง ถ้าจะให้รัดกุมจริงๆ จะต้องเขียนกันเยอะเลยครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 6:51 pm
by narin_han
bank9597 wrote:
narin_han wrote:คุณ bank9597 ครับ
เพิ่มเติมครับ ทีแรกผมคิดว่าผม copy code มาผิด
เลยไปดูจากไฟล์เก่าที่คุณ bank9597 คิดไว้ให้เมื่อคืน
ปรากฎว่า พอ เลือก done ในช่อง course 1 ปี 2014 ปรากฏว่า Done ในปี 2015 course 1 ก็ไม่แสดงออกมาครับ
แต่เมื่อคืนก่อนนอนผม test ได้แล้ว ยังงงๆอยู่ครับ
:D ผมยังไม่ได้เห็นไฟล์แนบครับ

เมื่อคืนที่ตอบไป ยังไม่รัดกุมครับ เนื่องจากเงื่อนไขยังไม่ชัดเจน

ถ้าเปิดฟอร์มขึ้นมาแล้ว เรากรอกช่วง ปี 15 ก่อนปี 14 จะให้ข้อมูลแสดงอย่างไร นี่แค่ส่วนหนึ่ง ถ้าจะให้รัดกุมจริงๆ จะต้องเขียนกันเยอะเลยครับ
แนบมาให้แล้วนะครับ :D :D

คือเงื่อนไขนั้น ใช้ได้เลยนะครับ เพราะเบื้องต้นต้องการเท่านี้ก่อนครับ (เพราะได้ตกลงกับคนที่ไปทำต่อแล้วนะครับว่า กรอกตามปีนะครับ)
คือยังไม่ต้องถึงระดับที่ต้องสั่งคำสั่งว่า ถ้ากรอก 2015 แล้วจะเด้งเตือนนะครับ
คือข้อมูล 2014 จะเป็นตามจริงครับ ส่วน 2 ปีหลัง คือ ตามการวางแผนครับ เพื่อใช้ในการกำหนดงบประมาณต่อไป
ที่เน้นจริงๆคือ Done นะครับ
เช่น course 1-5 2014 done แล้ว course 1-5 2015 done ตาม แล้ว course 1-5 2016 done ตาม นะครับ ถ้าเงื่อนไขไม่ใช่ตามนี้ก็ตาม combobox ที่เลือกไปครับ ผมดูที่ทางคุณ bank9597 ทำมาใช้ได้ครับ แต่พอลอง test done ในช่อง ปี 2015 และ 2016 ไม่ขึ้นนะครับ

ขอบคุณอีกครั้งครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 9:34 pm
by snasui
:D ลองปรับ Code ที่ CommandButton1 เป็นด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim range2014 As Range
    Dim range2015 As Range
    Dim r As Range
    With Sheets("temp")
        Set range2014 = .Range("e2:i2")
        Set range2015 = .Range("j2:n2")
        For Each r In range2014
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        For Each r In range2015
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        .Range("A2:S2").Resize(1, 19).Copy
        Sheets("Sheet1").Range("A" & Rows.Count) _
            .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
        MsgBox ("Already Saved")
        .Range("A2:S2").ClearContents
    End With
End Sub

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 9:45 pm
by narin_han
ก่อนอื่นขอขอบคุณอาจารย์ก่อนนะครับ :thup: :cp:

แล้วสำหรับของปี 2016 นะครับ ผมสามารถใช้สูตรแบบนี้ได้หรือไม่ครับ (ยังไม่ได้ test นะครับ)

Code: Select all

Private Sub CommandButton1_Click()
    Dim range2014 As Range
    Dim range2015 As Range
    Dim range2016 As Range
    Dim r As Range
    With Sheets("temp")
        Set range2014 = .Range("E2:I2")
        Set range2015 = .Range("J2:N2")
        Set range2016 = .Range("O2:S2")
        For Each r In range2014
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        For Each r In range2015
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        For Each r In range2016
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        .Range("A2:S2").Resize(1, 19).Copy
        Sheets("Sheet1").Range("A" & Rows.Count) _
            .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
        MsgBox ("Already Saved")
        .Range("A2:S2").ClearContents
    End With
End Sub

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 9:52 pm
by snasui
narin_han wrote:แล้วสำหรับของปี 2016 นะครับ ผมสามารถใช้สูตรแบบนี้ได้หรือไม่ครับ (ยังไม่ได้ test นะครับ)
:shock: ควรจะ Test ก่อน เมื่อ Test แล้วติดปัญหาใดค่อยถามกันต่อครับ

Re: สอบถามเรื่องการลงข้อมูล แบบกำหนดเงื่อนไข ในแบบฟอร์ม VBA

Posted: Thu Apr 10, 2014 10:13 pm
by narin_han
snasui wrote:
narin_han wrote:แล้วสำหรับของปี 2016 นะครับ ผมสามารถใช้สูตรแบบนี้ได้หรือไม่ครับ (ยังไม่ได้ test นะครับ)
:shock: ควรจะ Test ก่อน เมื่อ Test แล้วติดปัญหาใดค่อยถามกันต่อครับ
คืออยากขอบคุณอาจารย์ก่อนะครับ ผมลองทดสอบแล้วนะครับ ใช้ได้ผลดีเยี่ยมเลยครับ :cp: :cp: :cp:

ผมปรับสูตรจนครบแล้วนะครับ เพื่อนๆในบอร์ดสามารถนำไปใช้ประยุกต์ใช้ได้นะครับ ตามนี้เลยครับ

ปล.ผมขอขอบคุณ คุณ bank อีกคนด้วยนะครับ ไว้ผมทำงานเสร็จแล้ว จะมาช่วยตอบคำถามให้ในบอร์ดนะครับ

Code: Select all

Private Sub TextBox1_Change()
        Worksheets("temp").Range("A2") = Me.TextBox1
End Sub

Private Sub TextBox2_Change()
        Worksheets("temp").Range("B2") = Me.TextBox2
End Sub

Private Sub TextBox3_Change()
        Worksheets("temp").Range("C2") = Me.TextBox3
End Sub
Private Sub ComboBox19_Change()
        Worksheets("temp").Range("D2") = Me.ComboBox19
End Sub

Private Sub ComboBox1_Change()
        Worksheets("temp").Range("E2") = Me.ComboBox1
End Sub

Private Sub ComboBox2_Change()
        Worksheets("temp").Range("F2") = Me.ComboBox2
End Sub

Private Sub ComboBox3_Change()
        Worksheets("temp").Range("G2") = Me.ComboBox3
End Sub

Private Sub ComboBox5_Change()
        Worksheets("temp").Range("H2") = Me.ComboBox5
End Sub
Private Sub ComboBox6_Change()
        Worksheets("temp").Range("I2") = Me.ComboBox6
End Sub
Private Sub ComboBox8_Change()
        Worksheets("temp").Range("J2") = Me.ComboBox8
End Sub
Private Sub ComboBox9_Change()
        Worksheets("temp").Range("K2") = Me.ComboBox9
End Sub
Private Sub ComboBox10_Change()
        Worksheets("temp").Range("L2") = Me.ComboBox10
End Sub
Private Sub ComboBox11_Change()
        Worksheets("temp").Range("M2") = Me.ComboBox11
End Sub
Private Sub ComboBox7_Change()
        Worksheets("temp").Range("N2") = Me.ComboBox7
End Sub
Private Sub ComboBox14_Change()
        Worksheets("temp").Range("O2") = Me.ComboBox14
End Sub
Private Sub ComboBox15_Change()
        Worksheets("temp").Range("P2") = Me.ComboBox15
End Sub
Private Sub ComboBox16_Change()
        Worksheets("temp").Range("Q2") = Me.ComboBox16
End Sub
Private Sub ComboBox17_Change()
        Worksheets("temp").Range("R2") = Me.ComboBox17
End Sub
Private Sub ComboBox13_Change()
        Worksheets("temp").Range("S2") = Me.ComboBox13
End Sub

Private Sub CommandButton1_Click()
    Dim range2014 As Range
    Dim range2015 As Range
    Dim range2016 As Range
    Dim r As Range
    With Sheets("temp")
        Set range2014 = .Range("E2:I2")
        Set range2015 = .Range("J2:N2")
        Set range2016 = .Range("O2:S2")
        For Each r In range2014
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        For Each r In range2015
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        For Each r In range2016
            If r = "Done" Then r.Offset(0, 5) = r
        Next r
        .Range("A2:S2").Resize(1, 19).Copy
        Sheets("Sheet1").Range("A" & Rows.Count) _
            .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
        MsgBox ("Already Saved")
        .Range("A2:S2").ClearContents
    End With
End Sub