:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล้ว

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล้ว

#1

Post by akung »

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

Code: Select all

 If Target.Column = 1 Then
        
        With Sheets("Á.¤.")
            Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
        End With
        
        With Sheets("Data")
            Set Rng = .Range("A1", .Range("H" & Rows.Count).End(xlUp)) 'Range H ¤×Í Column ÊØ´·éÒ·Õè´Ö§
        End With
        
        ColName = 2
        ColAmount = 3
        ColIDMKT = 4
        ColNameMKT = 5
        ColBranch = 6
        ColPhone = 7
        
        lng = Application.CountIf(Rng.Resize(, 1), Target)
        
        If lng >= 1 Then
            Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
            Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
            Target.Offset(0, 5) = Application.VLookup(Target, Rng, ColIDMKT, 0)
            Target.Offset(0, 6) = Application.VLookup(Target, Rng, ColNameMKT, 0)
            Target.Offset(0, 8) = Application.VLookup(Target, Rng, ColBranch, 0)
            Target.Offset(0, 9) = Application.VLookup(Target, Rng, ColPhone, 0)
            Target.Offset(0, 3).Activate 'ä»·Õè ColumnD
        Else
            '¶éÒäÁèÁÕã¹°Ò¹¢éÍÁÙÅ
            MsgBox ("àÅ¢·ÕèºÑ­ªÕ¹ÕéäÁèÁÕã¹°Ò¹¢éÍÁÙÅ")
            Target.Offset(0, 0).Activate
            Target.Offset(0, 1) = "Êѹ¹Ô°Ò¹ÇèÒ»Ô´ºÑ­ªÕáÅéÇ"
            Target.Font.Color = vbRed
             Target.Font.Bold = True
            Target.Offset(0, 2) = ""
            Target.Offset(0, 5) = ""
            Target.Offset(0, 6) = ""
            Target.Offset(0, 8) = ""
            Target.Offset(0, 9) = ""
        End If
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#2

Post by snasui »

:D ตัวอย่าง Code

Code: Select all

Dim Confirm as Integer
If Target.Column = 1 Then
     Confirm = MsgBox("Are you sure?",VbYesNo)
End if
If Confirm = VbYes then
   'Do something
Else
   Exit sub
end if
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#3

Post by akung »

ขออภัยอาจารย์ที่ผมให้ข้อมูลไม่ชัดเจนครับ คือ ผมต้องการให้

1. เมือคีย์ที่ ColumnA แล้วให้ไปเช็คว่า ColumnB ในแถวเดียวกันมีข้อมูลอยู่หรือเปล่า
2. ถ้ามีข้อมูลอยู่ให้ถามว่าต้องการแก้ไขหรือไม่
3. ถ้าไม่ต้องการแก้ไขให้ ColumnA ยังคงข้อมูลตั้งแต่แรกก่อนที่คีย์ข้อมูลใหม่ใน ColumnA
4. ถ้าต้องการแก้ไข ก็ทำการตาม ขั้นตอนเดิม


สรุป คือ ต้องการให้ระบบถามยืนยันก่อนในกรณีที่ ColumnB ในแถวนั้น มีข้อมูลอยู่แล้วครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#4

Post by snasui »

:D ที่เขียนมายังเป็น Concept เดิมที่ผมตอบไป เพิ่มแค่ขั้นตอนการตรวจสอบครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#5

Post by akung »

Code: Select all


Dim Confirm as Integer
If Target.Column = 1 Then
     Confirm = MsgBox("Are you sure?",VbYesNo)
End if
If Confirm = VbYes then
   'Do something
Else
  Application.Undo
  Exit Sub
End If
ขอบคุณครับอาจารย์ ขออภัยที่ตอบช้าครับ จากการทดสอบ ถ้ากรณีตอบ No ระบบจะวนถามคำถามเดิมตลอดครับ ต้องตอบ Yes ถึงจะหลุดจาก Loop ครับ ไม่เ้ข้าใจว่าทำไมครับ

สาเหตุข้างต้นคาดว่าน่าจะเป็นคำสั่ง Application.Undo แต่จุดประสงค์ต้องการให้ข้อมูลย้อนกลับไปเหมือนเดิมในกรณีไม่มีการเปลี่ยนแปลง ในกรณีอย่างนี้เราควรใช้เทคนิคอย่างไรดีครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#6

Post by snasui »

:D แนบไฟล์ตัวอย่างพร้อม Code มาดูกัน จะได้สะดวกในการช่วยตรวจสอบ หาสาเหตุและแนวทางแก้ไขครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#7

Post by akung »

แนบไฟล์ตัวอย่างมาแล้วครับ

เมนูที่ใช้คีย์ข้อมูลคือ Sheets "ม.ค." ครับ โดยคีย์ข้อมูลที่ Column A แล้วระบบไปจะไปดึงข้อมูลใน Sheets "DATA" มาใส่ให้ครับ รบกวนอาจารย์ด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#8

Post by snasui »

:D ช่วยอธิบายวิธีการทดสอบ ค่าที่ใช้ในการทดสอบ ผลที่ได้ ผลลัพธ์ที่ต้องการมาด้วยครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#9

Post by akung »

snasui wrote::D ช่วยอธิบายวิธีการทดสอบ ค่าที่ใช้ในการทดสอบ ผลที่ได้ ผลลัพธ์ที่ต้องการมาด้วยครับ
วิธีการทดสอบครับ

1. ให้ไปที่ Sheets "ม.ค." แล้วคีย์ที่ Column A โดยลองไปดูข้อมูลใน Sheet "DATA" ที่เป็นฐานข้อมูลมาสัก 1 Record แล้วคีย์เลขที่รหัสลงไป เช่น 11-12345 ระบบจะดึงข้อมูลใน ColumnB จนถึง column สุดท้ายใน Sheet "DATA" มาไว้ที่ Sheet "ม.ค." ทันที่ หลักการเดี่ยวกับ Vlookup

2. ในกรณีที่เคยมีการคีย์ข้อมูลไปแล้ว แต่ต้องการแก้ไข ระบบจะถามว่าต้องการแก้ไขหรือไม่

ความต้องการคือ

เมื่อมีการเปลี่ยนแปลง และเมื่อตอบว่า No ให้สิ่งที่คีย์เปลี่ยนกลับไปข้อมูลเดิม เช่น ข้อมูลเดิมเป็น 11-12345 แต่มีการคีย์ เป็น 11-00000 แล้วเปลี่ยนใจไม่เปลี่ยน คือ กด "์NO" ให้ข้อมูลกลับไปเป็น 11-12345 เหมือนเดิม

ปัญหาคือ

ถ้าตอบ No ระบบจะถามคำถาม วน Loop ไม่เลิก คาดว่าเป็นเพราะคำสั่ง Application.Undo

รบกวนผู้รู้ทุกท่านขอเทคนิคแก้ไข เคสนี้ด้วยครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#10

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปครับ

จากไฟล์ที่แนบมา ผมคีย์ 12-12345 ซึ่งมีในฐานข้อมูลคือชีท DATA แต่โปรแกรมฟ่องว่าไม่มีในฐานข้อมูล แก้ตรงนี้ก่อนครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#11

Post by akung »

snasui wrote::D ค่อย ๆ ถามตอบกันไปครับ

จากไฟล์ที่แนบมา ผมคีย์ 12-12345 ซึ่งมีในฐานข้อมูลคือชีท DATA แต่โปรแกรมฟอ้งว่าไม่มีในฐานข้อมูล แก้ตรงนี้ก่อนครับ
จากต้นฉบับไม่เป็นครับ แต่พอ Copy ไฟล์มาแล้วลบข้อมูลจริงออกแล้วใส่ข้อมูลใหม่ไป กลับหาไม่เจออย่างที่อาจารย์ว่าไว้จริง ๆ ถ้ายังไงผมจะพยายามแก้ไขตรงนี้ก่อนแล้วกันครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#12

Post by akung »

ทำการแก้ไขเรียบร้อยแล้วครับ รบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#13

Post by snasui »

:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    'Other code
    Application.EnableEvents = False
    If Target.Count > 1 Then Exit Sub
       'Other code
    End If
    Application.EnableEvents = True
End Sub
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#14

Post by akung »

ขอความหมายของคำสั่งนี้หน่อยครับอาจารย์

Application.EnableEvents = False

สำหรับ Code ใช้งานได้ครับ มีเพิ่ม Application.EnableEvents = True เข้าไปหลังคำสั่งอีกที่ตรง Application.Undo ก็สมบูรณ์ครับ ขอบคุณครับ :thup:

และถ้าต้องการให้ตอนถาม Yes No ให้สถานะเตรียมไปอยู่ตรง No ต้องทำอย่างไรครับ
User avatar
logic
Gold
Gold
Posts: 1510
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#15

Post by logic »

ลองดู Code นี้ครับ :)

Code: Select all

Confirm = MsgBox("คุณต้องการแก้ไขข้อมูลใช่หรือไม่ !?", vbYesNo + vbDefaultButton2)
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#16

Post by akung »

logic wrote:ลองดู Code นี้ครับ :)

Code: Select all

Confirm = MsgBox("คุณต้องการแก้ไขข้อมูลใช่หรือไม่ !?", vbYesNo + vbDefaultButton2)
ขอบคุณมากครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: รบกวนสอบถามคำสั่ง VBA ที่เช็คว่าถ้ามีข้อมูลใน ColumnB แล

#17

Post by snasui »

akung wrote:ขอความหมายของคำสั่งนี้หน่อยครับอาจารย์

Application.EnableEvents = False
:D เป็นการเขียน Code เพื่อให้โปรแกรมไม่ต้องไปเรียกใช้ Event ใด ๆ หาก Code หลังจาก Application.EnableEvents = False ไปทำให้เกิด Event และเมื่อเพิ่ม Application.EnableEvents = False เอาไว้แล้วควรจะปิดด้วย Application.EnableEvents = True เสมอ เพื่อให้โปรแกรมกลับมายังสภาพที่พร้อมจะทำงานตาม Event อีกครั้ง
Post Reply