如果它可以幫助任何人,我終於解決了上述帶有「不是很漂亮,但工作的解決方案」:
在Workbook_Open
,我添加了一個偵聽器不會執行的Ctrl+v
關鍵通常貼而是將調用一個單獨的宏:
Application.OnKey "^{v}", "mySpecialPaste"
mySpecialPaste
存在的代碼:
MakeExclusive '<-- procedure to make the workbook exclusive
Application.OnKey "^{v}" '<-- remove the "Ctrl+V" link to the macro
Application.SendKeys "^{v}" '<-- send a Ctrl+V to perform the paste
Application.OnKey "^{v}", "mySpecialPaste" '<-- re-link the Ctrl+V to this macro
MakeShared '<-- make the workbook shared once again
當然這是不是一個優雅的解決方案,因爲它依賴於用戶使用Ctrl + V鍵執行圖片粘貼而不是(例如右鍵單擊/粘貼)的事實。此外,這將在任何Ctrl + V(即使用戶只是粘貼普通文本,即使在共享工作簿上爲正常操作)時觸發。最後,它依賴於SendKeys
這是衆所周知的不是很好(不可靠,不穩定)。
但是,對於我的具體用例來說,這是令人滿意的,所以我一直在考慮分享它作爲答案,因爲迄今爲止還沒有人想到更好的解決方案。
不知道這是否適合你,但看看[這裏](https://siddharthrout.wordpress.com/2011/08/15/vba-excelallow-paste-special-only/) –