:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#1

Post by narin_han »

EX.Training.xlsm
(33.48 KiB) Downloaded 14 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 ได้เลยครับ ฝากด้วยนะครับ
ทั้งนี้ผมได้แนบไฟล์แนบมาด้วยนะครับ

ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#2

Post 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 ระบุถึงโค๊ดที่มีปัญหาเลยครับ จะได้เข้าถึงปัญหาได้รวดเร็วขึ้น
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#3

Post 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 อื่นไม่ขึ้นตามที่กรอกครับ เป็นว่างไปเลยครับ

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

ขอบคุณครับ พร้อมแนบไฟล์แนบใหม่ครับ
Attachments
EX.Training แบบลงข้อมูลแล้วแสดงผลตามเงื่อนไข.xlsm
(34.79 KiB) Downloaded 10 times
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#4

Post 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 นะครับ

ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#5

Post by bank9597 »

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

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

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

เดี๋ยวยังไง ผมจะลองทำความเข้าใจงานของคุณก่อนครับ :mrgreen:
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#6

Post 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 ที่กำหนดสีก็จะไม่เป็นไปตามนั้นครับ

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

ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#7

Post 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
Attachments
EX.Training แบบลงข้อมูลแล้วแสดงผลตามเงื่อนไข.xlsm
(34.69 KiB) Downloaded 24 times
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#8

Post by narin_han »

:cp: :cp: :cp: :cp:

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

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

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

:D :D :D :D :D :D
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#9

Post by bank9597 »

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

ที่ผมเขียนโคีดการกำหนดเงื่อนไขด้วย if ไปให้นั้น ยังไม่รัดกุมครับ ยังไงต้องลองปรับดูน่ะครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#10

Post 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 ยังไงครับ ขอบคุณครับ
Attachments
EX.Training แบบลงข้อมูลแล้วแสดงผลตามเงื่อนไข_1.xlsm
(33.76 KiB) Downloaded 4 times
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#11

Post by bank9597 »

:D ลองแนบไฟล์มาดูด้วยครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#12

Post by narin_han »

ผมแนบมาแล้วครับ คุณ bank9597
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#13

Post by narin_han »

คุณ bank9597 ครับ
เพิ่มเติมครับ ทีแรกผมคิดว่าผม copy code มาผิด
เลยไปดูจากไฟล์เก่าที่คุณ bank9597 คิดไว้ให้เมื่อคืน
ปรากฎว่า พอ เลือก done ในช่อง course 1 ปี 2014 ปรากฏว่า Done ในปี 2015 course 1 ก็ไม่แสดงออกมาครับ
แต่เมื่อคืนก่อนนอนผม test ได้แล้ว ยังงงๆอยู่ครับ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#14

Post by narin_han »

ฝากขอถามถึงอาจารย์ด้วยนะครับ
ขอบคุณครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

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

#15

Post by bank9597 »

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

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

ถ้าเปิดฟอร์มขึ้นมาแล้ว เรากรอกช่วง ปี 15 ก่อนปี 14 จะให้ข้อมูลแสดงอย่างไร นี่แค่ส่วนหนึ่ง ถ้าจะให้รัดกุมจริงๆ จะต้องเขียนกันเยอะเลยครับ
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#16

Post 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 ไม่ขึ้นนะครับ

ขอบคุณอีกครั้งครับ
Attachments
EX.Training แบบลงข้อมูลแล้วแสดงผลตามเงื่อนไข_1.xlsm
(36.7 KiB) Downloaded 3 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#17

Post 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
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#18

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#19

Post by snasui »

narin_han wrote:แล้วสำหรับของปี 2016 นะครับ ผมสามารถใช้สูตรแบบนี้ได้หรือไม่ครับ (ยังไม่ได้ test นะครับ)
:shock: ควรจะ Test ก่อน เมื่อ Test แล้วติดปัญหาใดค่อยถามกันต่อครับ
narin_han
Member
Member
Posts: 23
Joined: Tue Mar 18, 2014 11:48 pm

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

#20

Post 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
Attachments
EX.Training แบบลงข้อมูลแล้วแสดงผลตามเงื่อนไข_1.xlsm
(34.68 KiB) Downloaded 18 times
Post Reply