2017-05-24 53 views
1

VBA新手在這裏。如何在Excel中的所有打開的會話中運行啓用excel的事件宏?

我有一個excel電子表格被鎖定格式。但是,如果您粘貼到電子表格中,則複製的格式將被粘貼到鎖定的工作表中。我使用下面的代碼在Excel中創建一個事件來撤消和粘貼特殊值。

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 

If Application.CutCopyMode = xlCopy Then 

    Application.EnableEvents = False 

    Application.Undo 
    Target.PasteSpecial Paste:=xlPasteValues 

    Application.EnableEvents = True 

End If 

End Sub 

但是,這隻適用於在同一個Excel會話中複製和粘貼的情況。我怎樣才能讓它在所有excel實例中工作?

謝謝! 丹

+0

打開任務管理器。如果您看到2個EXCEL.EXE進程,則它們無法通過對象模型相互交談。 'Application'引用當前實例,對象模型中沒有任何引用任何其他實例的任何東西。簡答:你不能。爲什麼源和目標工作簿不能在同一個Excel實例中? –

+0

可以將工作表更改功能寫入其他工作簿的工作表模塊中。請參閱Chip Pearson的「Sub AddProcedureToModule()」,網址爲http://www.cpearson.com/excel/vbe.aspx –

+0

@ Mat'sMug這是我們試圖發送給用戶的模板,他們將能夠編輯自己。我們希望他們能夠參加同一屆會議,但我們想看看是否可以用另一個實例來覆蓋他們。感謝您的答覆。 – Dan

回答

-1

粘貼此到同一個文件的ThisWorkbook模塊(假設moduleis現在還是空的!):

Option Explicit 

Private WithEvents App As Application 

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    If Application.CutCopyMode = xlCopy Then 

     Application.EnableEvents = False 

     Application.Undo 
     Target.PasteSpecial Paste:=xlPasteValues 

     Application.EnableEvents = True 

    End If 

End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Set App = Nothing 
End Sub 

Private Sub Workbook_Open() 
    Set App = Application 
End Sub 
+0

我刪除了我的代碼並將其粘貼到ThisWorkbook模塊中。然後保存並關閉excel。將工作簿中的數據粘貼到其他會話中時,它仍然不起作用。有什麼我忘記了嗎?或者有些答案是正確的,這是不能做到的?感謝您的快速回復。 – Dan

+0

如果您將刪除CutCopyMode的測試,您會看到它的工作原理,但隨後代碼將觸發任何更改。問題是,當您從Excel外部複製時,Application.CutCopyMode不等於xlCopy,但等於零。 – jkpieterse

+0

好的,我會試試看。謝謝你的幫助。 – Dan

相關問題