Page 1 of 2

Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 01, 2016 11:39 am
by Tanasan
คือผมต้องการทำ ให้ Sheet1 copy ไปยัง Sheet2 แบบ Realtime

เงื่อนไขคือ 1. เมื่อข้อมูลใน Sheet1 มีการเปลี่ยนแปลง Sheet2 ที่ทำการ Copy ไว้ต้องเปลี่ยนแปลงด้วย

ผมได้เขียน Code ออกมาแล้ว แต่ปรากฏว่า Sheet1 มีการเปลี่ยนแปลงข้อมุล แต่ Sheet2 ไม่มีการเปลี่ยนตาม
ต้องทำการ Run macro ทุกครั้งเลยครับ

รบกวนช่วยดู Code ให้ผมทีครับ ว่าผมเขียนผิดตรงไหนหรือป่าวครับ
Book1.xlsm

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 01, 2016 1:44 pm
by PichaiTC
ต้องวาง code ใน Sub Worksheet_Change() นะครับ จึงจะทำงานได้ทันที

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 01, 2016 2:39 pm
by Tanasan
โพสผมอาจจะ พบ งง ไปหน่อย คือ
ผมจะต้องใช้เงื่อนไขในการ copy cell อีกขั้นครับ ผมจึงต้องเขียนโค๊ดขึ้นมา เพื่อนำไปใส่ใน ฟั่งชั่น IF

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 01, 2016 2:40 pm
by Tanasan
PichaiTC wrote:ต้องวาง code ใน Sub Worksheet_Change() นะครับ จึงจะทำงานได้ทันที
ผมลองวางแล้วครับ
แต่มันจะมีผล ตอนเปิด excel ขึ้นมาใหม่ครับ

สูตรการจัดอันดับคะแนนจากมากไปหาน้อย

Posted: Wed Jun 01, 2016 2:43 pm
by bank26
ผมมีปัญหาในการจัดลำดับคะแนน สมมุติ มีนักเรียนในห้อง 10 คน มีคน
สอบได้10 คะแนน 3 คน
สอบได้ 9 คะแนน 4 คน
สอบได้ 8 คะแนน 3 คน
ผมลองใช้สูตร rank แล้ว ผลปรากฎว่า
คนที่สอบได้ 10 คะแนน ได้ลำดับที่ 1
คนที่สอบได้ 9 คะแนน ได้ลำดับที่ 4 (ระบบคำนวน 10 คะแนน 3 คน + 1 = 4)
คนที่สอบได้ 8 คะแนน ได้ลำดับที่ 8 (ระบบคำนวน 10 คะแนน 3 คน 9 คะแนน 4 คน +1 = 8)
ซึีงที่ต้องการอยากได้คือ
คนที่สอบได้ 10 คะแนน ได้ลำดับที่ 1
คนที่สอบได้ 9 คะแนน ได้ลำดับที่ 2
คนที่สอบได้ 8 คะนนได้ลำดับที่ 3
ไม่ทราบว่าต้องเขียนสูตรอย่างไรครับ

Re: สูตรการจัดอันดับคะแนนจากมากไปหาน้อย

Posted: Wed Jun 01, 2016 2:49 pm
by Tanasan
ิbank26 wrote:ผมมีปัญหาในการจัดลำดับคะแนน สมมุติ มีนักเรียนในห้อง 10 คน มีคน
สอบได้10 คะแนน 3 คน
สอบได้ 9 คะแนน 4 คน
สอบได้ 8 คะแนน 3 คน
ผมลองใช้สูตร rank แล้ว ผลปรากฎว่า
คนที่สอบได้ 10 คะแนน ได้ลำดับที่ 1
คนที่สอบได้ 9 คะแนน ได้ลำดับที่ 4 (ระบบคำนวน 10 คะแนน 3 คน + 1 = 4)
คนที่สอบได้ 8 คะแนน ได้ลำดับที่ 8 (ระบบคำนวน 10 คะแนน 3 คน 9 คะแนน 4 คน +1 = 8)
ซึีงที่ต้องการอยากได้คือ
คนที่สอบได้ 10 คะแนน ได้ลำดับที่ 1
คนที่สอบได้ 9 คะแนน ได้ลำดับที่ 2
คนที่สอบได้ 8 คะนนได้ลำดับที่ 3
ไม่ทราบว่าต้องเขียนสูตรอย่างไรครับ
ผมว่า ผิดกระทู้นะครับ อ่านกฏ ก่อนนะ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 01, 2016 6:45 pm
by snasui
Tanasan wrote:โพสผมอาจจะ พบ งง ไปหน่อย คือ
ผมจะต้องใช้เงื่อนไขในการ copy cell อีกขั้นครับ ผมจึงต้องเขียนโค๊ดขึ้นมา เพื่อนำไปใส่ใน ฟั่งชั่น IF
:D นำ Code ไปวางใน Event Change ครับ

ดูภาพประกอบด้านล่างครับ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Thu Jun 02, 2016 10:33 am
by Tanasan
snasui wrote:
Tanasan wrote:โพสผมอาจจะ พบ งง ไปหน่อย คือ
ผมจะต้องใช้เงื่อนไขในการ copy cell อีกขั้นครับ ผมจึงต้องเขียนโค๊ดขึ้นมา เพื่อนำไปใส่ใน ฟั่งชั่น IF
:D นำ Code ไปวางใน Event Change ครับ

ดูภาพประกอบด้านล่างครับ
ขอบคุณมากครับอาจารย์
ตอนนี้เป็นแบบ realtime เรียบร้อยแล้วครับ

ผมยังต้องศึกษาเกี่ยวกับ function Excel อีกเยอะเลยครับ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Mon Jun 06, 2016 2:33 pm
by Tanasan
snasui wrote:
Tanasan wrote:โพสผมอาจจะ พบ งง ไปหน่อย คือ
ผมจะต้องใช้เงื่อนไขในการ copy cell อีกขั้นครับ ผมจึงต้องเขียนโค๊ดขึ้นมา เพื่อนำไปใส่ใน ฟั่งชั่น IF
:D นำ Code ไปวางใน Event Change ครับ

ดูภาพประกอบด้านล่างครับ
เนื่องจากครั้งที่แล้วผมได้ Code Copy แบบ Realtime แล้ว
แต่ทำไม เวลาผมใส่คำสั่ง เงื่อนไขลงไปใหม่ คือ IF ปรากฏ ว่าคำสั่งไม่รันให้ครับ
เนื่องจากผมอ้างอิง value จาก ComboBox

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Sheet3.ComboBox4.Value = "1" Then
Worksheets("Monthly").Range("D9:D16").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("D17:D38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("E9:E16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("E17:E38").Value = Worksheets("record process").Range("AC19:AC40").Value

If Sheet3.ComboBox6.Value = "2" Then
Worksheets("Monthly").Range("G9:G6").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("G17:G38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("H9:H16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("H17:H38").Value = Worksheets("record process").Range("AC19:AC40").Value

If Sheet3.ComboBox6.Value = "3" Then
Worksheets("Monthly").Range("J9:J6").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("J17:J38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("K9:K16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("K17:K38").Value = Worksheets("record process").Range("AC19:AC40").Value
End If
End Sub


เงื่อนไข IF เพราะสาเหตุใด ถึงไม่ทำงาน

Posted: Mon Jun 06, 2016 3:01 pm
by Tanasan
เนื่องจากครั้งที่แล้วผมได้ Code Copy แบบ Realtime แล้ว
แต่ทำไม เวลาผมใส่คำสั่ง เงื่อนไขลงไปใหม่ คือ IF ปรากฏ ว่าคำสั่งไม่รันให้ครับ
เนื่องจากผมอ้างอิง value จาก ComboBox แต่โค๊ดก็ยังไม่ทำงานครับ
รบกวนช่วยดูให้หน่อยครับ ว่าผมตกหล่นไปตรงไหนบ้าง

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
If Sheet3.ComboBox4.Value = "1" Then
Worksheets("Monthly").Range("D9:D16").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("D17:D38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("E9:E16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("E17:E38").Value = Worksheets("record process").Range("AC19:AC40").Value

If Sheet3.ComboBox6.Value = "2" Then
Worksheets("Monthly").Range("G9:G6").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("G17:G38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("H9:H16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("H17:H38").Value = Worksheets("record process").Range("AC19:AC40").Value

If Sheet3.ComboBox6.Value = "3" Then
Worksheets("Monthly").Range("J9:J6").Value = Worksheets("record process").Range("P9:P16").Value
Worksheets("Monthly").Range("J17:J38").Value = Worksheets("record process").Range("P19:P40").Value
Worksheets("Monthly").Range("K9:K16").Value = Worksheets("record process").Range("AC9:AC16").Value
Worksheets("Monthly").Range("K17:K38").Value = Worksheets("record process").Range("AC19:AC40").Value
End If
End Sub

เนื่องจากไฟล์ Excel มีขนาดเกิน 300KB จึงต้องบีบอัดไฟล์มาให้ครับ
Copy of DATA ANDONG BOARD CL3 REV3 - Copy.rar

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Mon Jun 06, 2016 5:23 pm
by snasui
:D ทำการ Clear เซลล์ AF31 ไม่ให้คำนวณเป็นวงกลม (สังเกตบรรทัด Status Bar ด้านซ้ายล่างจอ)

จากนั้นปรับ Code เป็นด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Sheet3.ComboBox6.Value = "1" Then
        Worksheets("Monthly").Range("D9:D16").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("D17:D38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("E9:E16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("E17:E38").Value = Worksheets("record process").Range("AC19:AC40").Value
        
    ElseIf Sheet3.ComboBox6.Value = "2" Then
        Worksheets("Monthly").Range("G9:G6").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("G17:G38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("H9:H16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("H17:H38").Value = Worksheets("record process").Range("AC19:AC40").Value
        
    ElseIf Sheet3.ComboBox6.Value = "3" Then
        Worksheets("Monthly").Range("J9:J6").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("J17:J38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("K9:K16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("K17:K38").Value = Worksheets("record process").Range("AC19:AC40").Value
    End If
End Sub

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Mon Jun 06, 2016 5:59 pm
by Tanasan
snasui wrote::D ทำการ Clear เซลล์ AF31 ไม่ให้คำนวณเป็นวงกลม (สังเกตบรรทัด Status Bar ด้านซ้ายล่างจอ)

จากนั้นปรับ Code เป็นด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Sheet3.ComboBox6.Value = "1" Then
        Worksheets("Monthly").Range("D9:D16").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("D17:D38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("E9:E16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("E17:E38").Value = Worksheets("record process").Range("AC19:AC40").Value
        
    ElseIf Sheet3.ComboBox6.Value = "2" Then
        Worksheets("Monthly").Range("G9:G6").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("G17:G38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("H9:H16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("H17:H38").Value = Worksheets("record process").Range("AC19:AC40").Value
        
    ElseIf Sheet3.ComboBox6.Value = "3" Then
        Worksheets("Monthly").Range("J9:J6").Value = Worksheets("record process").Range("P9:P16").Value
        Worksheets("Monthly").Range("J17:J38").Value = Worksheets("record process").Range("P19:P40").Value
        Worksheets("Monthly").Range("K9:K16").Value = Worksheets("record process").Range("AC9:AC16").Value
        Worksheets("Monthly").Range("K17:K38").Value = Worksheets("record process").Range("AC19:AC40").Value
    End If
End Sub
เห็นแล้วครับ ขอบคุณมากครับ
ผมลองทำการทดสอบด้วยการลบออก คำสั่ง copy ถึงจะทำงานครับ
แต่ต้องลบทุกครั้งที่สั่งให้ copy

ขั้นตอนแรกผมทำการ Delete Cell "AF" ออกทั้งหมด ก็ยังไม่หายต้องมาทำการลบอีกด้วยการกด
ผมจึงน้ำ โค๊ด

Code: Select all

Sheet3.Range("AE7:AE40").clear
ไปวางใน Loop IF ทดลองแล้วก็ไม่ได้
ไปวางใน Openworkbook ก็ไม่ได้ ผมต้องไปวางตรงไหนหรอครับ เพื่อจะให้คำสั่ง ตรงตามเงื่อนไข แล้วออกมาตามเงื่อนไข if

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Mon Jun 06, 2016 6:21 pm
by snasui
:D ไม่เข้าใจครับ

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

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Tue Jun 07, 2016 8:06 am
by Tanasan
snasui wrote::D ไม่เข้าใจครับ

หากลบการคำนวณเป็นวงกลมออกแล้ว Code ควรจะทำงานได้ หากยังไม่ได้ให้แนบไฟล์ล่าสุดมา จะได้ช่วยตรวจสอบได้ ต้องทำเช่นนี้ทุกครั้งที่ติดปัญหาอย่าโพสต์มาเฉพาะ Code ครับ
เมื่อผมเลือกวันที่ใน ComboBox เสร็จแล้ว คำสั่งCopy จะไม่ทำงานครับ
ผมลองทำการทดสอบด้วยการลบออกที่ Cell AE7:AE40 และ AF7:AF40 คำสั่ง copy ถึงจะทำงานครับ
แต่ต้องลบทุกครั้งที่เลือกวันที่ ใน ComboBox

ผมจึงทำการเขียน Code

Code: Select all

Sheet3.Range("AE7:AE40").clear
(ตามไฟล์แนบ)
เพื่อให้ Clear Cell AE7:AE40 และ AF7:AF40 ทั้งหมด แต่ก็ยัง Clear ออกไม่ได้ ต้องกลับมาลบเองคำสั่งถึงจะทำงานครับ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Tue Jun 07, 2016 6:53 pm
by snasui
:D โพสต์ไว้แล้วแค่รอคำตอบครับ

ผู้ตอบจะตอบเองเมื่อทราบวิธี หรือเมื่อผมมีเวลาและไม่ติดเทศกาลที่ต้องหยุดยาวก็จะเข้ามาตอบให้ทุกคำถาม สังเกตได้ว่าในฟอรัมนี้ไม่มีกระทู้ร้างแม้แต่กระทู้เดียวครับ

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

จากการตรวจสอบไฟล์ที่แนบมานั้นยังมีการคำนวณเป็นวงกลม สังเกตได้ที่มุมซ้ายล่างจอ ยังติดคำว่า Circular references แสดงว่ายังมีปัญหาที่ชีตอื่น ให้ Unhide แล้วลบเซลล์ที่คำนวณเป็นวงกลมทิ้งให้หมดแล้วทดสอบดูใหม่ครับ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 08, 2016 7:59 am
by Tanasan
ขอโทษครับอาจารย์

จากที่ผมได้ตรวจสอบไฟล์ เกี่ยวกับ Circular references นั้น
ผมได้ทำการสร้างไฟล์ Excel ขึ้นมาใหม่ แล้วทำการเขียนโค๊ดลงไป
พบว่า ปัญหาดังกล่าวนั้น เหมือนกับไฟล์เอกสารที่แนบไปก่อนหน้านี้เช่นกันครับ

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

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 08, 2016 9:31 am
by logic
ถ้าเปลี่ยนค่าใน combobox แล้วให้โค้ดทำงานเลย อันนี้เป็น combobox change แล้วครับ ไม่ใช่ worksheet change ตอนแรกยังเข้าใจว่าเลือก combobox แล้วเปลี่ยนค่าในเซลล์ก่อนแล้วโค้ดค่อยทำงานครับ :|

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 08, 2016 9:45 am
by Tanasan
logic wrote:ถ้าเปลี่ยนค่าใน combobox แล้วให้โค้ดทำงานเลย อันนี้เป็น combobox change แล้วครับ ไม่ใช่ worksheet change ตอนแรกยังเข้าใจว่าเลือก combobox แล้วเปลี่ยนค่าในเซลล์ก่อนแล้วโค้ดค่อยทำงานครับ :|
ขอบคุณนะครับ
แต่ถ้าเปลี่ยนตรง ComboBox Change แล้ว ข้อมูลที่มีการเปลี่ยนแปลงภายหลัง จะไม่มีการอัพเดทแบบ Realtime เลยครับ
ไม่ทราบว่า พอจะมีวิธีไหมครับ คิดมา 2 วันแล้วครับ ยังไม่ออกเลย

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 08, 2016 10:29 am
by logic
สรุปคือต้องการให้ทำงาน 2 แบบ คือ คลิก combo แล้วโค้ดทำงาน หรืออีกไม่ก็ทำงานเมื่อเปลี่ยนค่าในเซลล์

แบบนี้ก็ต้องมีทั้งสองอันคือ worksheet_change กับ combobox_change ครับ

Re: Copy Sheet1 to Sheet2 ไม่เป็นแบบ Realtime

Posted: Wed Jun 08, 2016 10:42 am
by Tanasan
logic wrote:สรุปคือต้องการให้ทำงาน 2 แบบ คือ คลิก combo แล้วโค้ดทำงาน หรืออีกไม่ก็ทำงานเมื่อเปลี่ยนค่าในเซลล์

แบบนี้ก็ต้องมีทั้งสองอันคือ worksheet_change กับ combobox_change ครับ
ใช่ครับ ให้ทำสองอย่างในเวลาเดียวกันเลยครับ
ถ้ามี 2 อัน เป็นจะดึงมาใช้อย่างไร หรอครับ ผมลองทำเป็น module ก็ไม่ได้เหมือนกันครับ
ช่วยแนะนำผมหน่อยครับ รบกวนพี่ด้วยครับ