Page 1 of 1

สอบถาม Excel Marco เริ่มต้น

Posted: Mon Jun 08, 2015 12:33 pm
by Nat072
พอดีผมเพิ่งเริ่มหัดเรียนรู้ Excel VB ก็เลยลองเขียนแต่ก็ติดบ้างอย่าง ช่วงแก้ให้ด้วยครับ (ตัวอย่าง file)

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Mon Jun 08, 2015 3:33 pm
by yodpao.b

Code: Select all

Sub Clear1()

    Range("D5:E1000").ClearContents
    
End Sub
code Clear ใช้แบบนี้ดีกว่าไหมครับ
ส่วนสี เขียวแดง น่าใช้การจัดรูปแบบแบบใช้ข้อแม้ครับ

ในส่วนการเลื่อน เคอร์เซอร์รบกวนอาจารย์ช่วยเขียน Code ด้วยครับ
ขอศึกษาด้วยคนครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Mon Jun 08, 2015 7:05 pm
by snasui
Nat072 wrote:พอดีผมเพิ่งเริ่มหัดเรียนรู้ Excel VB ก็เลยลองเขียนแต่ก็ติดบ้างอย่าง ช่วงแก้ให้ด้วยครับ (ตัวอย่าง file)
:D ติดอะไรก็ให้แจ้ง Code นั้นมาในฟอรัมเลย อ่านกฎข้อ 5 ด้านบนประกอบด้วยเพื่อจะได้แจ้งมาครบถ้วนตามนั้นครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 1:06 am
by Nat072
1. ปุ่ม Y, N กดแล้วให้เรียงจากซ้าย ไปขวา แล้วเลื่อนลงมาด้านล่าง ตามตัวอย่าง File
2. ปุ่ม undo ถ้าคีย์ผิด สามารถถอยกลับไปแก้ใหม่ได้

Sub Yes()
Range("d5", "f14").Value = "Y"
Range("d5", "f14").Interior.Color = vbGreen
End Sub

Sub No()
Range("d5", "f14").Value = "N"
Range("d5", "f14").Interior.Color = vbRed
End Sub

Sub Clear()
Range("d5:f1000").Clearcontents
End Sub

Sub Undo()
Range("d5", "f14").Undo
End Sub

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 12:46 pm
by yodpao.b
เรียนอาจารย์ครับ สอบถามเกี่ยวกับการสั่งให้เคอร์เซอร์ ให้เลื่อนไปตำแหน่งที่ต้องการ
จากรูป
2.JPG
- เมื่อเคอร์เซอร์อยู่ในต่ำแหน่ง D7 ให้คลิกปุ่มสีเขียวด้านล่าง
- ตัวอักษร Y จะปรากฎ และเคอร์เซอร์จะเลื่อนไปที่ตำแหน่ง E7 ผลที่ได้ถูกต้อง

คำถาม เมื่อเคอร์เซอร์จะเลื่อนไปที่ตำแหน่ง E7 ให้คลิกปุ่มสีเขียวด้านล่าง ตัวอักษร Y จะปรากฎ และเคอร์เซอร์จะเลื่อนไปที่ตำแหน่ง D8

จะแก้ไขโคดว่าอะไรดีครับ
code เดิม

Code: Select all

Sub MacroYES()

    ActiveCell.FormulaR1C1 = "Y"
    ActiveCell.Offset(0, 1).Select

End Sub

แนบไฟล์

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 2:31 pm
by snasui
:D การเลื่อนเซลล์และการ Clear Contents ปรับ Code ตามด้านล่างครับ

Code: Select all

Sub Yes()
    ActiveCell.Value = "Y"
    If ActiveCell.Column = 4 Then
        ActiveCell.Offset(0, 1).Select
    ElseIf ActiveCell.Column = 5 Then
        ActiveCell.Offset(1, -1).Select
    End If
End Sub

Sub No()
    ActiveCell.Value = "N"
    If ActiveCell.Column = 4 Then
        ActiveCell.Offset(0, 1).Select
    ElseIf ActiveCell.Column = 5 Then
        ActiveCell.Offset(1, -1).Select
    End If
End Sub

Sub Clear()
    Range("d5:e14").ClearContents
End Sub
สำหรับการจัดตรงกลางและการระบายสี ให้ลองบันทึก Macro แล้วปรับปรุง Code ดูก่อน ติดตรงไหนค่อยมาถามกันต่อ หากผ่านทุกข้อแล้วค่อยมาเขียน Undo ครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 5:32 pm
by yodpao.b
เข้าใจแล้วครับ
"ActiveCell.Column = 4 " หมายถึง แถว D นั้นเอง

ขอบคุณครับ เดียวลอง เขียนโคด undo ครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 6:22 pm
by yodpao.b
เรียนอาจารย์ครับ undo หมายถึงการย้อนคำสั่งกลับไปที่ละสเตป
การเขียน undo ใน VBA
ผมได้ลอง บันทึก Macro แล้ว ไม่พบโคด undo ครับ และหลังจากเราใช้คำสั่งใน VBA แล้วก็ไม่สามารถใช้ undo ใน excel ได้


ผมจึงลองแปลง โคดที่อาจารย์ให้มาย้อนกลับไปที่ละสเตป " ซึ่งนั้นไม่ใช่ความหมายของคำว่า undo
โคด

Code: Select all

Sub MacroUnDo()
        If ActiveCell.Column = 4 Then
            ActiveCell.Offset(-1, 1).Select
        ElseIf ActiveCell.Column = 5 Then
            ActiveCell.Offset(0, -1).Select
        End If
    Selection.ClearContents
End Sub

คำถาม
ผมเข้าใจว่า ใน VBA ไม่สามารถเขียนโคด undo ถูกต้องไหมครับ

ถ้าเขียนได้อาจารย์ช่วยกรุณาลองเขียนให้ด้วยครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 6:39 pm
by snasui
:D จาก Code ที่เขียนมาสามารถปรับเป็นด้านล่างครับ

Code: Select all

Sub MacroUnDo()
    If ActiveCell.Row < 4 Then Exit Sub
    If ActiveCell.Column = 4 Then
        ActiveCell.ClearContents
        ActiveCell.Offset(-1, 1).Select
    ElseIf ActiveCell.Column = 5 Then
        ActiveCell.ClearContents
        ActiveCell.Offset(0, -1).Select
    End If
End Sub

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 6:49 pm
by snasui
:D คุณ yodpao.b ช่วยสรุปและตอบคำถามเจ้าของกระทู้ให้ครบทุกข้อตามที่ถามมาด้วย เนื่องจากได้ใช้กระทู้ถามในส่วนของตัวเองไปเป็นส่วนใหญ่ อาจจะออกนอกประเด็นที่เจ้าของกระทู้ตั้งใจไว้แต่เดิมครับ

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 7:21 pm
by yodpao.b
ครับผมไฟล์ที่แนบครั้งล่าสุดน่าจะใช้เป็นคำตอบได้
:tt: (ขอโทษเจ้าของกระทู้นะครับเล่นซะเป็นกระทู้ตัวเองเลย)

Re: สอบถาม Excel Marco เริ่มต้น

Posted: Tue Jun 09, 2015 8:51 pm
by Nat072
ส่วนตัวต้องขอขอบคุณ yodpao.b ที่ถามคำถามแทน ได้ความรู้เพิ่มเติมมาก
และเพิ่งเรียนรู้เริ่มต้นก็ยังงง. คงต้องไปศึกษาเพิ่มเติม
ขอบคุณอาจารย์ snasui ที่ค่อยชี้แนะ.