Page 1 of 1

code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Mon May 28, 2018 3:48 am
by Xengsue
เรียน อาจารย์ และ ผู้รู้ทุกท่าน ครับ
ผมมีเรื่องมาถาม ครับว่า
ผมได้เขียน code ห้ามไม่ให้ copy, cut and paste ลงใน workbook
แล้วผลก็ได้ความต้องการ แต่ยังติดที่ว่า
เมื่อ copy, cut จากที่อื่นที่ไม่ใช่ workbook เดียวกันมาวาง
มันสามารถวางได้ครับ ลบกวนช่วยเช็คดูให้หน่อยว่ายังติดตรงไหน

Code: Select all

Private Sub Workbook_Activate()
Dim oCtrl As Office.CommandBarControl

'Disable all Cut menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = False
     Next oCtrl

'Disable all Copy menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = False
     Next oCtrl
     
     'Disable Paste in Edit menu
     For Each oCtrl In Application.CommandBars.FindControls(ID:=22)
            oCtrl.Enabled = False
     Next oCtrl
     
     'Disable Paste Special...
     For Each oCtrl In Application.CommandBars.FindControls(ID:=755)
            oCtrl.Enabled = False
     Next oCtrl
     
          'Disable Paste button
     For Each oCtrl In Application.CommandBars.FindControls(ID:=6002)
            oCtrl.Enabled = False
     Next oCtrl
          
         'Disable Tools, Options so D&D cannot be restored
     For Each oCtrl In Application.CommandBars.FindControls(ID:=522)
            oCtrl.Enabled = False
     Next oCtrl
          Application.CellDragAndDrop = False
          Application.CutCopyMode = False 'Clear clipboard
End Sub

Private Sub Workbook_Deactivate()
Dim oCtrl As Office.CommandBarControl

'Enable all Cut menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = True
     Next oCtrl

'Enable all Copy menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = True
     Next oCtrl
     
          'Enable  Paste in Edit menu
     For Each oCtrl In Application.CommandBars.FindControls(ID:=22)
            oCtrl.Enabled = True
     Next oCtrl
     
     'Enable  Paste Special...
     For Each oCtrl In Application.CommandBars.FindControls(ID:=755)
            oCtrl.Enabled = True
     Next oCtrl
          
          'Enable  Paste button
     For Each oCtrl In Application.CommandBars.FindControls(ID:=6002)
            oCtrl.Enabled = True
     Next oCtrl
          
         'Enable  Tools, Options so D&D cannot be restored
     For Each oCtrl In Application.CommandBars.FindControls(ID:=522)
            oCtrl.Enabled = True
     Next oCtrl
        Application.CellDragAndDrop = True
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    With Application
        .CellDragAndDrop = False
        .CutCopyMode = False 'Clear clipboard
    End With
End Sub

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Mon May 28, 2018 6:47 am
by snasui
:D ควรแนบตัวอย่างไฟล์มาด้วยจะได้สะดวกในการทดสอบ ทั้งจะได้เห็นว่าเขียน Code ไว้ตำแหน่งใด อย่างไรครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 4:22 pm
by Xengsue
snasui wrote: Mon May 28, 2018 6:47 am :D ควรแนบตัวอย่างไฟล์มาด้วยจะได้สะดวกในการทดสอบ ทั้งจะได้เห็นว่าเขียน Code ไว้ตำแหน่งใด อย่างไรครับ
code ที่ผมเขียน ผมได้เขียนไว้ในนี้ ครับ
- เปีด Microsoft Visual Basic ขื้นมา แล้วไปที่ ThisWorkbook
- เขียน Code ตัวนี้ลงไปครับ

Code: Select all

Private Sub Workbook_Activate()
Dim oCtrl As Office.CommandBarControl

'Disable all Cut menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = False
     Next oCtrl

'Disable all Copy menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = False
     Next oCtrl
     
     'Disable Paste in Edit menu
     For Each oCtrl In Application.CommandBars.FindControls(ID:=22)
            oCtrl.Enabled = False
     Next oCtrl
     
     'Disable Paste Special...
     For Each oCtrl In Application.CommandBars.FindControls(ID:=755)
            oCtrl.Enabled = False
     Next oCtrl
     
          'Disable Paste button
     For Each oCtrl In Application.CommandBars.FindControls(ID:=6002)
            oCtrl.Enabled = False
     Next oCtrl
          
         'Disable Tools, Options so D&D cannot be restored
     For Each oCtrl In Application.CommandBars.FindControls(ID:=522)
            oCtrl.Enabled = False
     Next oCtrl
          Application.CellDragAndDrop = False
          Application.CutCopyMode = False 'Clear clipboard
End Sub

Private Sub Workbook_Deactivate()
Dim oCtrl As Office.CommandBarControl

'Enable all Cut menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
            oCtrl.Enabled = True
     Next oCtrl

'Enable all Copy menus
     For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
            oCtrl.Enabled = True
     Next oCtrl
     
          'Enable  Paste in Edit menu
     For Each oCtrl In Application.CommandBars.FindControls(ID:=22)
            oCtrl.Enabled = True
     Next oCtrl
     
     'Enable  Paste Special...
     For Each oCtrl In Application.CommandBars.FindControls(ID:=755)
            oCtrl.Enabled = True
     Next oCtrl
          
          'Enable  Paste button
     For Each oCtrl In Application.CommandBars.FindControls(ID:=6002)
            oCtrl.Enabled = True
     Next oCtrl
          
         'Enable  Tools, Options so D&D cannot be restored
     For Each oCtrl In Application.CommandBars.FindControls(ID:=522)
            oCtrl.Enabled = True
     Next oCtrl
        Application.CellDragAndDrop = True
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    With Application
        .CellDragAndDrop = False
        .CutCopyMode = False 'Clear clipboard
    End With
End Sub
ผลที่ออกมาได้ตามต้องการ แต่ยังติดที่ว่า
- เมื่อเรา copy or cut จากที่อื่นที่ไม่ใช่อยู่ใน file excel ตัวที่ผมได้ใส่ code ลงไป มาวางลงใน file excel ตัวที่ผมได้ใส่ code ลงไป
เห็นได้ว่ามันสามารถวางได้ครับ
- คือที่ผมค้องการคืไม่ให้วางอะไรลงในไฟล์ได้เลย ครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 7:45 pm
by snasui
:D ผมทดสอบเปิดไฟล์ที่แนบมากับไฟล์อื่นแล้วคัดลอกค่ามาวาพบว่าเมนูสำหรับการวางถูก Disable ไปแล้ว แสดงว่าไม่ยอมให้วาง ไม่ทราบว่าปัญหาคือยังแสดงเมนูการวางอยู่เช่นเดิมหรืออย่างไร ช่วยอธิบายเพิ่มด้วยครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 9:07 pm
by Xengsue
snasui wrote: Wed May 30, 2018 7:45 pm :D ผมทดสอบเปิดไฟล์ที่แนบมากับไฟล์อื่นแล้วคัดลอกค่ามาวาพบว่าเมนูสำหรับการวางถูก Disable ไปแล้ว แสดงว่าไม่ยอมให้วาง ไม่ทราบว่าปัญหาคือยังแสดงเมนูการวางอยู่เช่นเดิมหรืออย่างไร ช่วยอธิบายเพิ่มด้วยครับ
ที่ผมทำ ไม่รู้ว่าอาจารยทดลองเป็นเช่นกันไหม คือ code ที่ผมเขียนลงไปก็เพื่อที่จะปิดการ copy or cut and paste ทุกทางครับ คือ
ถ้าจะทำการ copy or cut and paste ในไฟล์ตัวนี้มันไม่สามารถทำได้อยู่แล้วเพาะผมเขียนสั่งปิดไปเอง แล้วปัณหานี้ผมทำแล้วผ่าน
แต่ที่ยังไม่ผ่านตรงที่ว่า เมื่อผม copy or cut ข้อความหรืออะไรจากที่อื่นไม่ว่าจะเป็นที่ไหนก็ช่างที่ไม่ใช่อยู่ใน file ตัวที่ผมได้เขียน code นี้ใส่ไปมันสามารถวางได้โดยทุกวิธีเลยครับ

ที่จริงความต้องการคือปิดทุกทิดทางของการ copy, cut and paste ครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 9:20 pm
by Xengsue
คือสมมุติว่าผมมีไฟล์ 2 ไฟล์ ชื่อ
1.ex1.xlsm (เป็นไฟล์ที่ผมได้เขียน code ใส่ไป)
2.ex2.xlsm (เป็นไฟล์ปกติไม่มี code)

เฉพาะไฟล์ ex1 ผมทำผ่านตามต้องการ
แต่พอผม copy or cut จากไฟล์ ex2 มาวางในไฟล์ ex1 ปรากฏว่ามันสามารถวางลงได้ทุกวิธีเลยครับ

ดั่งนั้น ผมต้องการอยากห้ามให้ไฟล์ ex1 ไม่สามารถที่จะ paste อะไรลงไปได้ทั้งสี้นครับ

รบกวนอาจารยด้วยครับ
ว่าผมเขียนผิดตรงไหน หรือ code ที่ผมเขียนยังไม่ได้สั่งปิดหมดทุกทิดทางครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 9:51 pm
by snasui
Xengsue wrote: Wed May 30, 2018 9:20 pm แต่พอผม copy or cut จากไฟล์ ex2 มาวางในไฟล์ ex1 ปรากฏว่ามันสามารถวางลงได้ทุกวิธีเลยครับ
:D ในเครื่องผมไม่สามารถวางได้เพราะเมนูถูก Disable ไปครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 10:54 pm
by Xengsue
แล้วผมขอคำแนะนำเพิ่มหน่อยครับ
คือที่ปิดแบบอาจารยบอกมา มันปิดยังไง แล้วผมคิดว่าน่าจะเป็นการปิดสำลับทุกไฟล์เลยใช่ไหมครับ
แต่ผมต้องการทำสำลับไฟล์ตัวที่ต้องการเท่านั้น ส่วนตัวอื่นฯให้ทำงานได้ปกติเหมือนเดีม
ผมต้องทำยังไง หรือ ต้องแก้ code เพิ่มยังไง

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 10:56 pm
by snasui
:D Code ที่เขียนมาทำงานได้ในเครื่องผมครับ

เปิดไฟล์โปรแกรมไม่สามารถจะคัดลอกหรือวางได้ เปิดไฟล์อื่น คัดลอกหรือวางได้ปกติ

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

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 11:06 pm
by Xengsue
snasui wrote: Wed May 30, 2018 10:56 pm :D Code ที่เขียนมาทำงานได้ในเครื่องผมครับ

เปิดไฟล์โปรแกรมไม่สามารถจะคัดลอกหรือวางได้ เปิดไฟล์อื่น คัดลอกหรือวางได้ปกติ

คัดลอกจากไฟล์อื่นมาวางที่ไฟล์โปรแกรม วางไม่ได้เพราะไม่มีเมนูให้วางครับ
แปลกมากถ้าเป็นแบบอาจารยบอกผมคงต้องเช็กโปรแกรมผมดูแล้วละ เพราะว่า ที่ของผมมันสามารถวางได้ทุกวิธีเลยครับ ผมถึงได้เข้ามาถามดู แต่ผมได้ลองใช้ 2007 และ 2013 เขียนผลก็สามารถวางได้หมดทุกวิธีเลยนะ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 11:09 pm
by snasui
:D ผมทดสอบด้วย Excel 2010 64bit บน Windows 7 ครับ

ลองดูไฟล์นี้ว่าทำงานได้ตรงความต้องการหรือไม่ครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 11:16 pm
by Xengsue
snasui wrote: Wed May 30, 2018 11:09 pm :D ผมทดสอบด้วย Excel 2010 64bit บน Windows 7 ครับ

ลองดูไฟล์นี้ว่าทำงานได้ตรงความต้องการหรือไม่ครับ
ติดปัญหาแบบเดียวเลยครับ
ภายในไฟล์ตัวที่อาจารยให้มามันปิด copy or cut and paste ได้ แต่พอ copy or cut จากที่อื่นมามันสามารถวางได้ทุกวิธีเหมือนกันครับ

Re: code vba ห้ามไม่ให้คัดลอกข้อมูลมาวางลงใน excel

Posted: Wed May 30, 2018 11:21 pm
by Xengsue
เดียวถ้าผมว่างผมจะถ่ายรูปหน้าจอมาให้อาจารยดูว่าผลตรงกันไหม หรือ ต่างกันยังไงจะได้หาคำตอบถูก