Page 2 of 3

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 5:19 pm
by axiomy
ให้ย้ายข้อมูลไปเหมือนเดิมทุกอย่างเลยอะค่ะอาจารย์ เพียงแค่ต้องการให้พื้นหลังของ row ที่ย้ายจาก Issue Log มาใน Inactive เป็นสีเทาค่ะ
(ลบ row ที่มี status เป็น Closed และ Cancelled ออกจาก Issue log เหมือนเดิมเลยค่ะ และเมื่อ row ที่ถูกลบออกถูกย้ายมาที่ Inactive ให้พื้นหลังของ row ที่ถูกย้ายมา Inactive เป็นสีเทาอะค่ะอาจารย์)

อาจารย์งงหนูหรือเปล่าคะ ถ้าหนูอธิบายงงขออภัยด้วยอะนะอาจารย์

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 5:30 pm
by snasui
axiomy wrote:อาจารย์ขา ขอโทษหนูที่อธิบายให้อาจารย์ไม่ชัดเจนนะคะ คือ row ที่ต้องการให้เป็นสีเทาคือ row ที่อยู่ใน Inactive แล้วอะค่ะ คือหนูต้องการให้ทุกๆ row ใน Inactive ที่มี data อยู่เป็นสีเทาอะค่ะอาจารย์
:lol: อืม...ผมอ่านไม่ละเอียดเอง หากต้องการระบายสีเป็นสีเทาในชีท Inactive ลองดู Code ตามด้านล่างครับ

Code: Select all

Option Explicit
Sub TransferData()
Dim r As Range
Dim i As Integer
Dim k As Integer
Dim rt As Range
k = Worksheets("Issue Log").Range("L65536").End(xlUp).Row
With Worksheets("Issue Log")
    For i = k To 2 Step -1
        If .Cells(i, "L") = "Cancelled" Or .Cells(i, "L") = "Closed" Then
            Set r = .Range("L" & i).Offset(0, -11).Resize(1, 17)
            Set rt = Worksheets("Inactive").Range("L65536").End(xlUp).Offset(1, -11).Resize(1, 17)
            r.Copy rt
            rt.Interior.ColorIndex = 15
            r.EntireRow.Delete
        End If
    Next i
End With
End Sub

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 08, 2011 9:03 am
by axiomy
เยี่ยมไปเลยค่ะ อาจารย์ Sugoi มากๆเลยค่ะ ขอบคุณอาจารย์นะคะ :D

รบกวนถามอาจารย์อย่างหนึ่งเพื่อเสริมความรู้ได้ไหมคะ ว่า 15 ในบรรทัด "rt.Interior.ColorIndex = 15"

มันคือรหัสของสีเทาหรอคะอาจารย์ ทีแรกหนูก็ใส่โค้ดแบบอาจารย์แต่ว่าใส่โค้ดสีลงไป แล้วมันเกิด error อะค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 08, 2011 12:02 pm
by axiomy
ขอรบกวนถามอาจารย์อีกค่ะว่า ถ้าเราต้องการนับ record ของ 2 columns แรกในตาราง (Issue & Recommend) ว่ามีทั้งหมดกี่ record แล้ว จะต้องทำอย่างไรคะ หมายเหตุ: ข้อมูลยังต้องมีการเพิ่มขึ้นเรื่อยๆอะค่ะ อยากให้จำนวน record อยู่ที่ท้าย column เหมือนใน file ที่แนบมาอะค่ะ

ps ถามอาจารย์เรื่องใหม่ จะต้องตั้งกระทู้หัวข้อใหม่หรือเปล่าคะ?

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 08, 2011 5:31 pm
by snasui
axiomy wrote:เยี่ยมไปเลยค่ะ อาจารย์ Sugoi มากๆเลยค่ะ ขอบคุณอาจารย์นะคะ :D

รบกวนถามอาจารย์อย่างหนึ่งเพื่อเสริมความรู้ได้ไหมคะ ว่า 15 ในบรรทัด "rt.Interior.ColorIndex = 15"

มันคือรหัสของสีเทาหรอคะอาจารย์ ทีแรกหนูก็ใส่โค้ดแบบอาจารย์แต่ว่าใส่โค้ดสีลงไป แล้วมันเกิด error อะค่ะ
ถูกต้องครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 08, 2011 5:56 pm
by snasui
axiomy wrote:ขอรบกวนถามอาจารย์อีกค่ะว่า ถ้าเราต้องการนับ record ของ 2 columns แรกในตาราง (Issue & Recommend) ว่ามีทั้งหมดกี่ record แล้ว จะต้องทำอย่างไรคะ หมายเหตุ: ข้อมูลยังต้องมีการเพิ่มขึ้นเรื่อยๆอะค่ะ อยากให้จำนวน record อยู่ที่ท้าย column เหมือนใน file ที่แนบมาอะค่ะ
คุณ axiomy ควรปรับ Code มาเองก่อนแล้วค่อยส่งมาดูกันครับว่าที่ปรับมานั้นมีผิดพลาดตรงไหน สำหรับที่ถามมาผมทำตัวอย่างการปรับ Code มาให้ตามด้านล่างครับ

Code: Select all

Option Explicit
Sub TransferData()
Dim r As Range, rt As Range
Dim rCount As Range
Dim i As Integer, k As Integer
With Worksheets("Issue Log")
k = .Range("L65536").End(xlUp).Row
    For i = k To 2 Step -1
        If .Cells(i, "L") = "Cancelled" Or .Cells(i, "L") = "Closed" Then
            Set r = .Range("L" & i).Offset(0, -11).Resize(1, 17)
            Set rt = Worksheets("Inactive").Range("L65536").End(xlUp).Offset(1, -11).Resize(1, 17)
            r.Copy rt
            rt.Interior.ColorIndex = 15
            r.EntireRow.Delete
        End If
    Next i
    .Range("C65536").End(xlUp).Offset(1, 0).EntireRow.ClearContents
    Set rCount = .Range("B65536").End(xlUp).Offset(1, 0)
    rCount = rCount.Row - 2 & " Records"
    rCount.Font.ColorIndex = 3
End With
End Sub
ps ถามอาจารย์เรื่องใหม่ จะต้องตั้งกระทู้หัวข้อใหม่หรือเปล่าคะ?
ถูกต้องครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 28, 2011 3:12 pm
by axiomy
อาจารย์ขา หนูเจอปัญหาอีกแล้วค่ะ เรื่องย้าย sheet เรื่องเดิม คือพอหนูย้ายข้อมูลอีก sheet หนึ่งแล้วหนูไม่อยากเอา function dropdown มาด้วยอะค่ะอาจารย์ ไม่ทราบว่าเอาออกจะได้มั้ยคะ คืออยากย้ายมาแค่ data ไม่เอา function อะค่ะ

ขอบคุณค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 28, 2011 3:49 pm
by snasui
เปลี่ยนตรงบรรทัดด้านล่างครับ

จาก

Code: Select all

r.Copy rt
เปลี่ยนเป็น

Code: Select all

r.Copy
rt.PasteSpecial xlPasteValues

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri May 06, 2011 11:54 am
by axiomy
เจอโจทย์เรื่องการย้าย sheet อีกแล้วค่ะอาจารย์ คราวนี้ condition ในการย้ายเกี่ยวกับวันที่อะค่ะ ไม่แน่ใจว่า condition แบบนี้จะสามารถทำได้หรือเปล่าค่ะ
condition1: จากใน Sheet “Issue Log”ถ้า today()+30 มากกว่าหรือเท่ากับวันที่ใน Column Target dateให้ copy ข้อมูลจาก Column ที่ชื่อ No., Iss, Rec, Session, Response by, Sol,และTarget Date จาก sheet “Issue Log” ไปที่ “Report1” และใน Column “Remind to RP” (ใน report1)จะทำ button ในแต่ละ row เพื่อให้ user กดเพื่อย้ายข้อมูลไป sheet “NTF RP” ค่ะ
(จุดประสงค์คือต้องการทำ report เตือนว่าอีก 1 เดือนจะถึง target date แล้ว แต่บางครั้งตอนที่เปิด file อาจจะเหลือเวลาก่อนถึง target date เพียง 29 วัน หนูเลยใช้ “today()+30 มากกว่าหรือเท่ากับ Target date” จะใช้ได้มั้ยคะอาจารย์)

Condition2(ย้ายจาก Sheet “Report1” ไปที่ “NTF RP”): เมื่อ user กด button ใน Column “Remind to RP” (ใน Sheet “Report1” )ให้ข้อมูลใน row นั้นๆ ย้ายไปที่ Sheet "NTF RP" ค่ะ โดยให้ย้ายไปที่ cell ที่มีพื้นหลังสีฟ้าใน “NTF RP” ค่ะอาจารย์

วิธีการเหล่านี้ดูซับซ้อนไปมั้ยคะอาจารย์ คือหนูลองคิดมาหลายวันแล้ว วิธีนี้น่าจะตรงกับ requirement อะค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri May 06, 2011 12:26 pm
by snasui
:D ช่วยส่ง Code ที่ได้ลองทำด้วยตัวเองดูแล้วมาด้วยครับ จะได้ดูว่าทำแล้วติดตรงไหน

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri May 06, 2011 3:34 pm
by axiomy
อาจารย์คะ ตรง code บรรทัดที่ 10 มัน error อะค่ะ หนูใส่ If .Cells(i, "P") = TODAY() + 30 Or .Cells(i, "P") = TODAY() > 30 Then ดูเหมือนว่าจะ error ตรง TODAY() ค่าที่ใส่ห้ามเป็น method หรอคะอาจารย์

รบกวนอาจารย์ด้วยนะคะ ไม่เคยเขียน vba เลยอะค่ะ กำลังนั่งทำความเข้าใจ code ที่อาจารย์เคยเขียนมาให้ค่ะ :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri May 06, 2011 3:38 pm
by axiomy
code ที่เมื่อกี๊เขียนไป ผิดค่ะ อาจารย์ หนูจะใส่ If .Cells(i, "P") = TODAY() + 30 Or .Cells(i, "P") > TODAY() + 30 การย้าย sheet อันนี้มันเลือกเป็นเฉพาะบาง column อะค่ะ กำหนดเป็นช่วงๆแบบคราวที่แล้วไม่ได้ ขอโทษที่รบกวนอาจารย์บ่อยๆนะคะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri May 06, 2011 9:42 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Option Explicit
Sub IssueLogToReport1()
Dim r As Range, rt As Range
Dim i As Integer, k As Integer
k = Worksheets("Issue Log").Range("L65536").End(xlUp).Row
With Worksheets("Issue Log")
    For i = k To 2 Step -1
        If .Cells(i, "P") >= Date + 30 Then
            Set r = .Range("P" & i)
            Set rt = Worksheets("Report1").Range("G65536") _
                .End(xlUp).Offset(1, -6)
            r.Offset(0, -15).Resize(1, 3).Copy
            rt.PasteSpecial xlPasteValues
            r.Offset(0, -11).Copy
            rt.Offset(0, 3).PasteSpecial xlPasteValues
            r.Offset(0, -3).Copy
            rt.Offset(0, 4).PasteSpecial xlPasteValues
            r.Offset(0, -7).Copy
            rt.Offset(0, 5).PasteSpecial xlPasteValues
            r.Copy
            rt.Offset(0, 6).PasteSpecial xlPasteValues
            r.EntireRow.Delete
        End If
    Next i
End With
Application.CutCopyMode = False
End Sub

Sub MoveToNTF()
Dim rs As Range
Dim rt As Range
Set rs = Worksheets("Report1").Range("A2")
Set rt = Worksheets("NTF RP").Range("G6")
    rt = rs.Offset(0, 1) ' ss
    rt.Offset(0, 1) = rs.Offset(0, 2) 'rec
    rt.Offset(1, 0) = rs.Offset(0, 3) 'session
    rt.Offset(2, 0) = rs.Offset(0, 4) 'response
    rt.Offset(3, 0) = rs.Offset(0, 5) 'sol
    rt.Offset(4, 0) = rs.Offset(0, 6) 'target date
    Range("H:H").Replace What:="=", Replacement:="#"
    rs.Resize(1, 7).Delete shift:=xlUp
    Range("H:H").Replace What:="#", Replacement:="="
End Sub
หากคุณ axiomy จำเป็นต้องใช้ VBA ควรจะศึกษาพื้นฐานให้เข้าใจเพื่อปรับ Code ได้บ้างครับ ไม่เช่นนั้นจะไม่สามารถแก้ไขเองได้แม้เพียงการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ

สำหรับกรณีที่ถามมานี้ไม่ง่ายนักสำหรับมือใหม่ เพื่อเป็นแนวทางในการศึกษา VBA ให้เริ่มจากการบันทึก Macro แล้วดูว่าจากการกระทำของเรานั้น โปรแกรมบันทึกออกมาเป็น Code อย่างไร จะทำให้เกิดความคุ้นเคยมากขึ้นครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Sun May 08, 2011 11:12 pm
by axiomy
ขอบคุณอาจารย์สำหรับคำแนะนำดีๆนะคะ เมื่อมีเวลาว่างจะศึกษาให้มากกว่านี้ค่ะ สำหรับ Requirements ต่อไป จะพยายามทำให้ได้มากกว่ากว่านี้ค่ะ :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 11:15 am
by xl_Bginner
ก่อนอื่นขออนุญาตชี้แจ้งให้อาจารย์ทราบค่ะว่าหนูไม่สามารถ login โดยใช้ account อันเก่าได้ค่ะ(axiomy) เลยสมัครชื่อใหม่เป็นชื่อนี้แทน
หลังจากวันนั้นที่อาจารย์ให้หนูไปศึกษา code เพิ่มเติม หนูทำตามที่อาจารย์บอกแล้วนะคะ ตอนนี้อ่าน code ที่อาจารย์เคยเขียนมาให้เข้าใจเกือบหมดแล้วค่ะ :P
แต่พอหนู run code ไปเรื่อยๆ ก็ยังพบช่องโหว่ของ program นี้ค่ะ เลยขอเข้ามาปรึกษาอาจารย์ หนูขออนุญาตอธิบายรายละเอียดไว้ใน file นะคะอาจารย์
อย่างน้อยขอคำตอบเป็น algorithm ก็ยังดีค่ะ :D

ขอบคุณค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 11:21 am
by snasui
:D ก่อนตอบปัญหา อยากทราบว่า Login เก่าเข้าไม่ได้โดยมีข้อความอะไรแจ้งบ้างครับ :?:

ปกติแล้วกรณีที่เข้าไม่ได้ให้อีเมลไปที่ snasui@gmail.com เพื่อผมจะได้แนะนำขั้นตอนหรือ Reset Password ให้ใหม่กรณีที่ทดสอบแล้วเข้าไม่ได้จริง ๆ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 11:33 am
by xl_Bginner
คืออย่างงี้ค่ะอาจารย์ตอนแรกๆก็มีข้อความแจ้งประมาณว่าว่า user หรือ password ไม่ถูกต้อง หนูคิดว่าสาเหตุอาจจะมาจากการที่หนูเข้าไปลองตั้งค่าส่วนตัวค่ะ แล้วไปเปลี่ยน e-mail รวมถึง password ด้วย จากครั้งแรกที่หนู login ไม่ได้หนูก็เลยกด link ที่เขียนว่า "ลืมรหัสผ่าน" จากนั้นก็กรอก e-mail ที่เปลี่ยนลงไป มันก็ไม่ได้อยู่ดีอะค่ะ :roll:

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 11:39 am
by axiomy
เอิ่มม อาจารย์คะ เมื่อกี๊หนูลองกดคำว่า "ลืมรหัสผ่าน" ใหม่อีกครั้ง มันได้แล้วค่ะ อาจารย์ ทีนี้หนูควรใช้ account เดิมหรืออันใหม่ดีคะ
ต้องขอโทษอาจารย์ด้วยนะคะที่ไม่ check ให้รอบคอบก่อน :)

ps เมื่อวานหนูกดตั้งหลายครั้งมันไม่ได้อะค่ะ วันนี้ลองครั้งเดียว ได้เลย แปลกจัง

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 11:59 am
by snasui
:P ใช้ Login อันใหม่หรืออันเก่าก็ได้ขึ้นกับความสะดวกครับ

สำหรับการใช้ Condition Formatting ตามที่แจ้งมานั้นเป็นวิธีการที่ไม่ถูกต้องครับ เนื่องจากเป็นการทำทั้งชีท ที่ควรทำคือเลือกเฉพาะพื้นที่ที่ใช้งาน หากจะเผื่อไว้ก็เพียงเท่าที่คาดว่าจำนวนข้อมูลจะขยายไปถึงเท่านั้น

กรณีต้องการจะวางข้อมูลโดยมีเงื่อนไขว่า ถ้ามีอยู่แล้วจะไม่มีการวางซ้ำ จะต้องระบุให้ได้ว่าการตรวจสอบว่าซ้ำนั้น ให้ตรวจสอบค่าใดในชีท Issue Log กับค่าในคอลัมน์ใดของชีท ReportResponse แล้วค่อยมาเขียน Code ครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed May 11, 2011 3:08 pm
by xl_Bginner
ไม่รู้จะ check ข้อมูลใน ReportResponse อย่างไรอะค่ะอาจารย์ เพราะเมื่อกด button ใน column ท้ายสุด ข้อมูลจะถูกไปอีก sheet หนึ่ง และข้อมูลทั้ง row ก็จะถูกลบออกไป ทำให้บางครั้งใน Sheet "ReportResponse" อาจไม่มีข้อมูลใดๆให้ check เลยอะค่ะ ทำอย่างนี้ได้มั้ยคะอาจารย์ คือ check ว่าข้อมูลใดใน Issue Log ที่เคยถูก copy ไป ReportResponse แล้ว จะไม่อนุญาตให้ copy ไปได้อีก ใน excel พอจะมีคำสั่งคล้ายๆแบบนี้มั้ยคะ :flw:

ปัญหามันคือหนูตั้งช่วงไว้ว่าก่อนถึง target date 30 หรือน้อยกว่า 30 วัน ให้ copy ข้อมูลไป Report Response ทีนี้ถ้าหาก user run code วันนี้ และข้อมูลถูกย้ายไป ReportResponse และส่งเมลแจ้งเตือนผู้รับผิดชอบเรียบร้อย วันรุ่งขึ้น run code ใหม่ issue นี้ก็ยังถูก copy ไปที่ ReportResponse (จาก condition target date - today <= 30) มันจึงเกิดความซับซ้อนขึ้น และทำให้สับสนว่าแจ้งเตือนไปแล้วหรือยังไม่ได้แจ้ง

รบกวนขอคำแนะนำด้วยค่ะ