excel - 拖放 VBA 警报
问题描述
当我从浏览器拖放到 Excel 电子表格中时,我试图收到警报。当我从 excel 中的一个单元格拖动到另一个单元格时,单元格中有数据会被询问,但其他时候不会。我正在尝试将它添加到电子表格工作表更改子中的现有代码中,但由于它不是复制和粘贴,所以它不在我的剪贴板上。我尝试在执行此操作时录制一个宏,但它只显示“ActiveSheet.Paste”,如果我的剪贴板上有东西,它会粘贴它而不是我想要的拖放值。
我找到了一种我想要的代码,但不希望它从另一个单元格复制,只有我拖放的值。
If Range("D1") <> "" Then
Response = MsgBox("Do you want to overwrite the existing data", vbYesNo)
End If
If Response = vbYes Then
Range("A1").Copy Range("D1")
End If
我想也许有可能做到这一点?在我的电子表格中,我只在更改列 J 时激活代码。
解决方案
我不相信你可以用 Excel 附带的开箱即用事件等来做你想做的事情。您可能需要探索自定义事件(如果适用)或自定义编写的加载项,它们可能使您能够捕获此类事件。
考虑一下我刚刚在一个新工作表上完成的以下测试,以基于将一个单元格“拖放”到另一个单元格来确定哪些事件以何种顺序触发。
两个潜艇都在Sheet1
代码模块内。
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print "Change " & Target.Address
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Debug.Print "Selection Change " & Target.Address
End Sub
如果我在 Cell 中有一个值,A1
然后单击并拖动该单元格C5
,则结果输出如下:
Change $A$1 Change $C$5 Selection Change $C$5
这显示了事件按此顺序触发并针对这些单元格:
Worksheet_Change
事件在源单元格上触发。Worksheet_Change
事件在目标单元格上触发。Worksheet_SelectionChange
事件在目标单元格上触发。
这为我们提供了以下考虑:
- 该
Worksheet_Change
事件触发两次,一次是单击并拖动源单元格的初始化,然后是在您拖放到目标单元格时再次触发。 - 这使得一个干净的解决方案变得困难,因为它很容易编写一个无限循环。
SelectionChange
只触发一次,因此使用起来会更容易一些,但是您需要在拖放的源范围内进行馈送。
我试图解决一些问题,但我总是以无限循环的change/selectionchange
事件触发或在应用程序警报触发之前捕获事件等问题结束。
推荐阅读
- c# - 在 C# 中,如何从 Azure 服务总线队列中获取所有消息?
- go - 如何使用 Gorilla 处理 DELETE 调用的预检请求?
- excel - 将文本从 excel 提取到 word 时错误对象变量或块变量未设置错误 91 的原因
- sql - 在雪花 SQL UDTF 中传递动态参数
- delphi - Delphi 软件包安装错误:动态链接库 (DLL) 初始化例程失败
- spring-security - 如何为 GraphQL API 配置 spring-security?
- python - 元组一维上 for 循环的向量化
- python - xarray:动态选择函数以减少数组
- python - 通过拆分列表以追加行来重塑数据框
- python - Python,稳定性并在安装链中替换它:如何安装 HP 扫描仪