วันเสาร์ที่ 23 พฤศจิกายน พ.ศ. 2556

การห้ามย้ายเซลล์ (Drag) เฉพาะไฟล์ที่กำลังใช้งาน ของ Excel

ปัญหา
ปกติเมื่อมีการเรียกใช้งาน Application.CellDragAndDrop = False จะทำให้ ไฟล์ของ Excel ทุกไฟล์ หรือ ทุก Workbook ที่เปิดใช้งาน ไม่สามารถ ลากเซลลไปวางไว้ที่ไหนได้ ถ้าต้องการห้ามเฉพาะไฟล์ หรือ Workbook ที่กำลังใช้งาน หรือ Active Workbook เท่านั้น จะทำอย่างไร

หลักการ
คำสั่งดังกล่าว เป็นระดับ Application จึงมีผลต่อทุกไฟล์ที่เปิด ถ้าต้องการบังคับเฉพาะไฟล์ หรือเฉพาะ Workbook จึงต้องมีวิธีการ กำหนดให้บังคับเฉพาะชื่อไฟล์ที่ระบุเท่านั้น

วิธีการ
  1. เปิดไฟล์ใหม่ บันทึกเป็นไฟล์ xlsm โดยใช้ชื่อ noDrag
  2. เปิดหน้าจอเขียนโค้ด (Alt + F11)
  3. สร้างโมดูลใหม่ โดยไปที่ Insert > Module
  4. Excel จะตั้งชื่อให้เป็น Module1 ให้คัดลอกโค้ดนี้ไปวาง
    Dim X As New Class1
    Sub InitializeApp()
    '   Called by Workbook_Open
        Set X.App = Application
    End Sub
  5. สร้าง Class Module ใหม่ โดยไปที่ Insert > Class Module
  6. Excel จะตั้งชื่อว่า Class1 ให้ใช้ชื่อนี้ จะได้ไม่ต้องไปเปลี่ยนในโค้ด
  7. คัดลอกโค้ดต่อไปนี้ ลงใน Class1
    Public WithEvents App As Application
    Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
    '   *** ชื่อไฟล์ที่กำลังใช้งาน ***
        If Wb.Name = "noDrag.xlsm" Then
            Application.CellDragAndDrop = False
        End If
    End Sub
    Private Sub App_WorkbookDeactivate(ByVal Wb As Workbook)
    '   *** ชื่อไฟล์ที่กำลังใช้งาน ***
        If Wb.Name = "noDrag.xlsm" Then
            Application.CellDragAndDrop = True
        End If
    End Sub
  8. ดับเบิ้ลคลิกที่ สมุดงานนี้ เพื่อเขียนโค้ดสำหรับ สมุดงานนี้ หรือ Workbook นี้
  9. คัดลอกโค้ดนี้ เพื่อให้โค้ดนี้ทำงาน เมื่อเปิดไฟล์นี้ หรือ Workbook นี้
    Private Sub Workbook_Open()
        Call InitializeApp
    End Sub
  10. ปิดหน้าจอเขียนโค้ด และทดสอบ โดยพิมพ์ข้อความลงในเซลล์ เมื่อนำเมาส์ไปวางที่ขอบเซลล์ จะไม่มีเครื่องหมายให้ลากเซลล์ได้ โดยบังคับเฉพาะไฟล์นี้เท่านั้น เมื่อเปิดไฟล์ใหม่ หรือไฟล์อื่น ๆ จะสามารถลากได้ตามปกติ

ที่มา
http://www.mrexcel.com/forum/excel-questions/44522-visual-basic-applications-disable-cut-copy-drag-drop.html

อ่านเพิ่มเคิมที่
http://www.cpearson.com/excel/appevent.aspx

ไม่มีความคิดเห็น:

แสดงความคิดเห็น