Page 1 of 1

VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Thu Apr 16, 2015 2:33 pm
by NEO889
สวัสดีครับผมเขียน VBA โดยสร้าง Module ขึ้นมา โดยผมเขียนโค้ดดังนี้ครับ

Code: Select all

Sub Record()
ActiveSheet.Unprotect Password:="3890" '<==UnProtect
If Range("R2") <> "" And Range("D2") <> "" And Range("K2") <> "" And Range("E4") <> "" And Range("N4") <> "" And Range("AE4") <> "" And Range("D7") And Range("C6") And Range("N6") And Range("AE6") And Range("E8") And Range("S8") Then
.Range("A11:BC11") _
.Range("BH11").Copy
.Range("A" & Rows.Count) _
    .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range("K2,S8") _
       .SpecialCells(xlCellTypeConstants).ClearContents
    MsgBox ("ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂ")
Else
    MsgBox ("¤Ø³ÂѧãÊè¢éÍÁÙÅäÁè¤Ãº")
    Range("R4").Activate
End If
ActiveSheet.Protect Password:="3890" '<==Protect Again
End Sub
มันไม่ผ่านให้ครับ ไม่แน่ว่าผิดพลาดตรงไหนหรือเปล่า

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Thu Apr 16, 2015 8:41 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub Record()
    With ActiveSheet
        .Unprotect Password:="3890" '<==UnProtect
        If .Range("R2") <> "" And .Range("D2") <> "" _
            And .Range("K2") <> "" And .Range("E4") <> "" _
            And .Range("N4") <> "" And .Range("AE4") <> "" _
            And .Range("D7") <> "" And .Range("C6") <> "" _
            And .Range("N6") <> "" And .Range("AE6") <> "" _
            And .Range("E8") <> "" And .Range("S8") <> "" Then
        .Range("A11", "BH11").Copy .Range("A" & .Rows.Count) _
            .End(xlUp).Offset(1, 0)
        .Range("K2,S8") _
               .SpecialCells(xlCellTypeConstants).ClearContents
            MsgBox ("บันทึกข้อมูลเรียบร้อย")
        Else
            MsgBox ("คุณยังใส่ข้อมูลไม่ครบ")
            .Range("R4").Activate
        End If
        .Protect Password:="3890" '<==Protect Again
    End With
End Sub


Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 8:29 am
by NEO889
โค้ดผ่านแล้วครับ แต่พอกดบันทึกแล้วข้อมูลไม่บันทึกลงตารางด้านล่างครับ

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 8:44 am
by DhitiBank
ลองใส่คำสั่ง

Code: Select all

.Range("A" & Rows.Count) _
    .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
เข้าไปไว้ที่เดิมครับ :)

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 8:52 am
by NEO889
ขึ้น Errer ครับ

Code: Select all

Sub Record()
    With ActiveSheet
        .Unprotect Password:="3890" '<==UnProtect
        If .Range("R2") <> "" And .Range("D2") <> "" _
            And .Range("K2") <> "" And .Range("E4") <> "" _
            And .Range("N4") <> "" And .Range("AE4") <> "" _
            And .Range("C6") <> "" _
            And .Range("N6") <> "" And .Range("AE6") <> "" _
            And .Range("E8") <> "" And .Range("S8") <> "" Then
	.Range("A11:BH11").Copy .Range("A" & .Rows.Count) _
        .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues _
        .Range("K2,S8").SpecialCells(xlCellTypeConstants).ClearContents
            MsgBox ("ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂ")
        Else
            MsgBox ("¤Ø³ÂѧãÊè¢éÍÁÙÅäÁè¤Ãº")
            .Range("R4").Activate
        End If
        .Protect Password:="3890" '<==Protect Again
    End With
End Sub


Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 9:22 am
by DhitiBank

Code: Select all

.Range("A11:BH11").Copy .Range("A" & .Rows.Count) _
        .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues _
        .Range("K2,S8").SpecialCells(xlCellTypeConstants).ClearContents
ลองปรับเป็นแบบนี้ครับ

Code: Select all

.Range("A11:BH11").Copy 
.Range("A" & .Rows.Count) _
        .End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
.Range("K2,S8").SpecialCells(xlCellTypeConstants).ClearContents

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 10:31 am
by NEO889
ยังติดอยู่ 2 ตัวแปรด้วยกันครับ ลองแก้ไขแล้วไม่ผ่านสักทีครับ
Image

ขอบคุณครับ

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 10:37 am
by DhitiBank
ลองแนบไฟล์ที่ปรับแก้แล้วมาด้วยได้ไหมครับ จะได้ช่วยกันทดสอบครับ

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 10:55 am
by DhitiBank
อ๋อ ปัญหาเกิดจากการผสานเซลล์ครับ หากยังต้องการผสานเซลล์อยู่แบบนี้ ลองปรับโค้ดเป็นแบบนี้ครับ

Code: Select all

Sub Record()
    Dim i&
    With ActiveSheet
        .Unprotect Password:="3890" '<==UnProtect
        If .Range("R2") <> "" And .Range("D2") <> "" _
            And .Range("K2") <> "" And .Range("E4") <> "" _
            And .Range("N4") <> "" And .Range("AE4") <> "" _
            And .Range("D7") <> "" And .Range("C6") <> "" _
            And .Range("N6") <> "" And .Range("AE6") <> "" _
            And .Range("E8") <> "" And .Range("S8") <> "" Then
        i = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Row
        .Range("a" & i).Value = .Range("a11").Value
        .Range("b" & i).Value = .Range("b11").Value
        '.......
        '.......
        
        .Range("K2,S8") _
               .SpecialCells(xlCellTypeConstants).ClearContents
            MsgBox ("บันทึกข้อมูลเรียบร้อย")
        Else
            MsgBox ("คุณยังใส่ข้อมูลไม่ครบ")
            .Range("R4").Activate
        End If
        .Protect Password:="3890" '<==Protect Again
    End With
End Sub
ตรงที่เป็น '..... หมายถึงให้ใส่ต่อนะครับ โดยทำรูปแบบคล้ายๆ กับแถวที่อยู่ก่อนหน้านั้น แล้วลองรันดูว่าผ่านไหม

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 3:42 pm
by NEO889
โค้ดผ่านครับไม่ขั้น Ererr แต่ข้อมูลยังไม่มาเหมือนเดิม ต้องใช้คำสั่ง .copy ด้วยใช่ไหมครับ

Code: Select all

Sub Record()
    Dim i&
    With ActiveSheet
        .Unprotect Password:="3890" '<==UnProtect
        If .Range("R2") <> "" And .Range("D2") <> "" _
            And .Range("K2") <> "" And .Range("E4") <> "" _
            And .Range("N4") <> "" And .Range("AE4") <> "" _
            And .Range("C6") <> "" _
            And .Range("N6") <> "" And .Range("AE6") <> "" _
            And .Range("E8") <> "" And .Range("S8") <> "" Then
        i = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Row
        .Range("a" & i).Value = .Range("a11").Value
        .Range("b" & i).Value = .Range("b11").Value
        .Range("c" & i).Value = .Range("E11").Value
        .Range("d" & i).Value = .Range("W11").Value
        .Range("e" & i).Value = .Range("AH11").Value
        .Range("F" & i).Value = .Range("AS11").Value
        .Range("G" & i).Value = .Range("AX11").Value
        .Range("H" & i).Value = .Range("BC11").Value
               .Range("K2,S8") _
               .SpecialCells(xlCellTypeConstants).ClearContents
            MsgBox ("ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂ")
        Else
            MsgBox ("¤Ø³ÂѧãÊè¢éÍÁÙÅäÁè¤Ãº")
            .Range("R4").Activate
        End If
        .Protect Password:="3890" '<==Protect Again
    End With
End Sub

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 4:47 pm
by DhitiBank
ข้อมูลไม่มาแน่นอนครับ เพราะจากโค้ด ข้อมูลต้นทางจะอยู่ที่ A11:BG11 แต่เมื่อไม่มีข้อมูลอะไรอยู่ คำสั่งก็คัดลอกเพียงค่าว่างๆ ไปครับ
เท่าที่ดูคุณสมบัติของ A11:BG11 คุณได้ล็อคเซลล์เอาไว้ แสดงว่าจะเอาไว้ใช้ดึงข้อมูลจากรายการให้เลือกด้านบนใช่หรือไม่ครับ หากใช่ คุณก็ต้องใส่สูตรดึงข้อมูลขณะที่ผู้ใช้งานกำลังคีย์ข้อมูลก่อน ดึงเอามาไว้ในตารางแถวที่ 11 นี้ จากนั้นพอรันโค้ดแล้ว ค่าต่างๆ ถึงไปอยู่ในตารางด้านล่างครับ

และอีกอย่าง คำสั่งต้นทางและปลายทางยังคลาดเคลื่อนอยู่ครับ ผมลองปรับมาเล็กน้อยตามไฟล์แนบครับ

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 5:31 pm
by NEO889
ขอบคุณครับ ใช้งานได้เลยครับ
:cp:

Re: VBA บันทึกข้อมูลใน Sheets เดียวกัน

Posted: Fri Apr 17, 2015 8:01 pm
by snasui
NEO889 wrote:โค้ดผ่านแล้วครับ แต่พอกดบันทึกแล้วข้อมูลไม่บันทึกลงตารางด้านล่างครับ
:D ผมคิดว่า Code ทำงานได้ถูกต้อง ยกเว้นมีการกรอกข้อมูลตามเงื่อนไขมาไม่ครบ หากไม่ได้คำตอบอย่างไรควรแนบไฟล์ที่มีตัวอย่างข้อมูลที่ครบถ้วนและควรจะบันทึกได้มาด้วยจะได้ช่วยดูต่อไปจากนั้น การแจ้งมาเฉย ๆ ไม่ได้ช่วยให้หาความผิดพลาดได้ครับ