การห้ามย้ายเซลล์ (Drag) เฉพาะไฟล์ที่กำลังใช้งาน ของ Excel
ปัญหา
ปกติเมื่อมีการเรียกใช้งาน Application.CellDragAndDrop = False จะทำให้ ไฟล์ของ Excel ทุกไฟล์ หรือ ทุก Workbook ที่เปิดใช้งาน ไม่สามารถ ลากเซลลไปวางไว้ที่ไหนได้ ถ้าต้องการห้ามเฉพาะไฟล์ หรือ Workbook ที่กำลังใช้งาน หรือ Active Workbook เท่านั้น จะทำอย่างไร
หลักการ
คำสั่งดังกล่าว เป็นระดับ Application จึงมีผลต่อทุกไฟล์ที่เปิด ถ้าต้องการบังคับเฉพาะไฟล์ หรือเฉพาะ Workbook จึงต้องมีวิธีการ กำหนดให้บังคับเฉพาะชื่อไฟล์ที่ระบุเท่านั้น
วิธีการ
ที่มา
http://www.mrexcel.com/forum/excel-questions/44522-visual-basic-applications-disable-cut-copy-drag-drop.html
อ่านเพิ่มเคิมที่
http://www.cpearson.com/excel/appevent.aspx
ปกติเมื่อมีการเรียกใช้งาน Application.CellDragAndDrop = False จะทำให้ ไฟล์ของ Excel ทุกไฟล์ หรือ ทุก Workbook ที่เปิดใช้งาน ไม่สามารถ ลากเซลลไปวางไว้ที่ไหนได้ ถ้าต้องการห้ามเฉพาะไฟล์ หรือ Workbook ที่กำลังใช้งาน หรือ Active Workbook เท่านั้น จะทำอย่างไร
หลักการ
คำสั่งดังกล่าว เป็นระดับ Application จึงมีผลต่อทุกไฟล์ที่เปิด ถ้าต้องการบังคับเฉพาะไฟล์ หรือเฉพาะ Workbook จึงต้องมีวิธีการ กำหนดให้บังคับเฉพาะชื่อไฟล์ที่ระบุเท่านั้น
วิธีการ
- เปิดไฟล์ใหม่ บันทึกเป็นไฟล์ xlsm โดยใช้ชื่อ noDrag
- เปิดหน้าจอเขียนโค้ด (Alt + F11)
- สร้างโมดูลใหม่ โดยไปที่ Insert > Module
- Excel จะตั้งชื่อให้เป็น Module1 ให้คัดลอกโค้ดนี้ไปวาง
Dim X As New Class1
Sub InitializeApp()
' Called by Workbook_Open
Set X.App = Application
End Sub - สร้าง Class Module ใหม่ โดยไปที่ Insert > Class Module
- Excel จะตั้งชื่อว่า Class1 ให้ใช้ชื่อนี้ จะได้ไม่ต้องไปเปลี่ยนในโค้ด
- คัดลอกโค้ดต่อไปนี้ ลงใน 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 - ดับเบิ้ลคลิกที่ สมุดงานนี้ เพื่อเขียนโค้ดสำหรับ สมุดงานนี้ หรือ Workbook นี้
- คัดลอกโค้ดนี้ เพื่อให้โค้ดนี้ทำงาน เมื่อเปิดไฟล์นี้ หรือ Workbook นี้
Private Sub Workbook_Open()
Call InitializeApp
End Sub - ปิดหน้าจอเขียนโค้ด และทดสอบ โดยพิมพ์ข้อความลงในเซลล์ เมื่อนำเมาส์ไปวางที่ขอบเซลล์ จะไม่มีเครื่องหมายให้ลากเซลล์ได้ โดยบังคับเฉพาะไฟล์นี้เท่านั้น เมื่อเปิดไฟล์ใหม่ หรือไฟล์อื่น ๆ จะสามารถลากได้ตามปกติ
ที่มา
http://www.mrexcel.com/forum/excel-questions/44522-visual-basic-applications-disable-cut-copy-drag-drop.html
อ่านเพิ่มเคิมที่
http://www.cpearson.com/excel/appevent.aspx
ความคิดเห็น
แสดงความคิดเห็น