Page 1 of 1

เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Wed Jul 06, 2016 8:45 am
by Tanasan
ใน Sheet"record process" Combobox4 ผมต้องการให้ค่าเปลี่ยนจาก 1 เป็น 2 , จาก2 เป็น 3 , จาก 3 เป็น 4
ตามเวลาที่รับค่าเข้ามาจาก PLC ซึ่งจะอยู่ใน Sheet"DATA IO" Cell D4:E4

ตัวอย่างเช่น ปัจจุบัน Sheet"DATA IO" Cell D4:E4 อยู่ในช่วงเวลา 03:00 พอครบเวลาที่กำหนดคือ 7:30 จะให้ ComboBox4 ใน Sheet "record process" +1 อย่างนี้ไปเรื่อยๆ จนเริ่มเดือนใหม่

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

Re: เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Wed Jul 06, 2016 5:37 pm
by snasui
:D การใช้เวลามาเป็น Event ในการเปลี่ยนค่าใน ComboBox จะมี 2 ลักษณะเป็นอย่างน้อยครับ

แบบแรกเปลี่ยนค่าใน ComboBox เมื่อถึงกำหนดเวลานั้นและต้องเปิดไฟล์อยู่ตลอดเวลา Code ที่ใช้จะเป็นการ Code ลักษณะการจับเวลา

แบบที่สองคือ เมื่อเปิดไฟล์ค่อยตรวจสอบแล้วเปลี่ยนค่าใน ComboBox

การเขียน Code จะยากง่ายต่างกัน โดยแบบที่สองจะง่ายกว่า

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

Re: เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Thu Jul 07, 2016 8:48 am
by Tanasan
snasui wrote::D การใช้เวลามาเป็น Event ในการเปลี่ยนค่าใน ComboBox จะมี 2 ลักษณะเป็นอย่างน้อยครับ

แบบแรกเปลี่ยนค่าใน ComboBox เมื่อถึงกำหนดเวลานั้นและต้องเปิดไฟล์อยู่ตลอดเวลา Code ที่ใช้จะเป็นการ Code ลักษณะการจับเวลา

แบบที่สองคือ เมื่อเปิดไฟล์ค่อยตรวจสอบแล้วเปลี่ยนค่าใน ComboBox

การเขียน Code จะยากง่ายต่างกัน โดยแบบที่สองจะง่ายกว่า

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

ผมเลือกใช้แบบแรกครับ
เนื่องจากผมเปิดไฟล์ตลอดเวลา เมื่อถึงเวลาที่กำหนดจะ ComboBox จะทำการ +1 อัตโนมัติ
แต่เวลาที่ผมใช้ในการจับเวลา Input นั้นมาจาก PLC ครับ เป็นตัวรันเวลา และใน Cell ที่ผมทำไว้คือ ให้ PLC บันทึกเวลาลงใน
Cell D4:E4

Code ที่ใช้ในการจับเวลานั้น ผมลองใช้ Timer ในการเขียนแล้ว แต่ไม่ได้ผลครับ
ComboBox ไม่ +1 ครับ ผมลองใช้ Timer อ้างอิงกับ Cell ที่รับเวลามาจาก PLC ก็ไม่ออกครับ
เพราะผมกำหนดเวลาให้แยกกัน โดยจำนวนชั่วโมงอยู่ที่ D4 ส่วนนาที อยู่ E4 แต่พอนำมาเปรียบเทียบ D4=7,E4=30
เพื่อจะให้ ComboBox +1 เพิ่มไป แต่คำสั่งไม่รัน

หรือว่าผมใช้ Code ในการจับเวลาผิดครับ

Re: เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Thu Jul 07, 2016 3:40 pm
by Tanasan
snasui wrote::D การใช้เวลามาเป็น Event ในการเปลี่ยนค่าใน ComboBox จะมี 2 ลักษณะเป็นอย่างน้อยครับ

แบบแรกเปลี่ยนค่าใน ComboBox เมื่อถึงกำหนดเวลานั้นและต้องเปิดไฟล์อยู่ตลอดเวลา Code ที่ใช้จะเป็นการ Code ลักษณะการจับเวลา

แบบที่สองคือ เมื่อเปิดไฟล์ค่อยตรวจสอบแล้วเปลี่ยนค่าใน ComboBox

การเขียน Code จะยากง่ายต่างกัน โดยแบบที่สองจะง่ายกว่า

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

อาจารย์ครับ ผมได้ทดลองเขียน Code ตามที่ผมต้องการออกมาแล้วครับ เป็น Code แบบเงื่อนไขง่ายๆ
ที่ผมต้องการให้ตรงตามเงื่อนไข

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        If Sheet3.ComboBox4 = "1" Then
            If Sheet5.Range("D4").Value = 7 And Sheet5.Range("E4").Value = 30 Then Sheet3.ComboBox4 = ("1") + 1
            
        ElseIf Sheet3.ComboBox4 = "2" Then
            If Sheet5.Range("D4").Value = 7 And Sheet5.Range("E4").Value = 30 Then Sheet3.ComboBox4 = ("2") + 1
        
        ElseIf Sheet3.ComboBox4 = "3" Then
            If Sheet5.Range("D4").Value = 7 And Sheet5.Range("E4").Value = 30 Then Sheet3.ComboBox4 = ("3") + 1
            .
            .
            .
            .
        ElseIf Sheet3.ComboBox4 = "30" Then
            If Sheet5.Range("D4").Value = 7 And Sheet5.Range("E4").Value = 30 Then Sheet3.ComboBox4 = ("30") + 1
            
        ElseIf Sheet3.ComboBox4 = "31" Then
            If Sheet5.Range("D4").Value = 7 And Sheet5.Range("E4").Value = 30 Then Sheet3.ComboBox4 = ("31") - 30
        
        End If
End Sub
แต่ติดปัญหาคือ
1. เมื่อทำการคลิกเมาส์ที่ส่วนใดก็ได้ของ Sheet5(DATA IO) วันที่จะเปลี่ยนเอง ถ้าตัวเลขใน D4 = 7 และ E4 = 30
2. เมื่อเปลี่ยน ComboBox5 ใน Sheet3(record Process) วันที่ของผมจะไม่ทำการนับใหม่โดยให้เริ่มจาก 1

ไม่ทราบว่าผมเขียน Code แบบนี้จะมีปัญหาอย่างอื่นตามมาหรือไม่ครับ ถ้า Input เวลาจาก PLC

Re: เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Thu Jul 07, 2016 9:49 pm
by snasui
:D กรณีต้องการส่งค่ามาเพื่อเปลี่ยนค่าในเซลล์ แสดงว่าควรดักด้วย Worksheets_Change ไม่ใช่ WorkSheet_SelectionChange ครับ

Re: เปลี่ยนค่าใน Combobox ตามเงื่อนไข

Posted: Fri Jul 08, 2016 10:53 am
by Tanasan
snasui wrote::D กรณีต้องการส่งค่ามาเพื่อเปลี่ยนค่าในเซลล์ แสดงว่าควรดักด้วย Worksheets_Change ไม่ใช่ WorkSheet_SelectionChange ครับ
ครับ ขอบคุณมากครับ
เดี๋ยวผมจะลองดูครับ