当用户尝试将图像粘贴到工作簿的工作表上时,我想运行某个过程(宏)。
如果用户只是将简单文本粘贴到非共享工作簿的工作表中,那么我可以通过Workbook_SheetChange
的{{1}}轻松检测到该事件(有一些技巧可以理解它是一个“粘贴”事件,而不是一个简单的文本手动输入)。
然而,这里的复杂性增加了两个因素:
Worksheet_Change
; 有没有人有任何想法(甚至包括用于拦截剪贴板操作的Windows API)?
答案 0 :(得分:2)
如果它可以帮助任何人,我终于用一个"不是很好但工作正常的解决方案来解决上述问题":
在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
不是很好(不可靠,不稳定)。
但是,对于我的特定用例来说,这是令人满意的,所以我考虑将其作为答案进行分享,因为到目前为止还没有人想到更好的解决方案。