Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 在MS Excel中侦听鼠标(拖放)事件_Events_Vba_Excel_Drag And Drop - Fatal编程技术网

Events 在MS Excel中侦听鼠标(拖放)事件

Events 在MS Excel中侦听鼠标(拖放)事件,events,vba,excel,drag-and-drop,Events,Vba,Excel,Drag And Drop,是否有方法识别MS Excel工作表上的拖放事件?我想要的是,当您将文件(比如从桌面)拖放到MS Excel工作表的单元格中(并将文件名插入单元格中)时,能够侦听事件 使用Excel宏可以实现这一点吗?我自己也不确定如何执行该任务-但是,似乎有人已经尝试解决该问题。我从以下位置提取了此代码: 从这里开始,就是将子例程绑定到另一个宏,以实现某种形式的自动化,或者按照您认为合适的方式拖放,或者执行任何对您有意义的操作 如果有帮助,请告诉我 ~JOL您可以在UserForm对象上使用“BeforeDr

是否有方法识别MS Excel工作表上的拖放事件?我想要的是,当您将文件(比如从桌面)拖放到MS Excel工作表的单元格中(并将文件名插入单元格中)时,能够侦听事件


使用Excel宏可以实现这一点吗?

我自己也不确定如何执行该任务-但是,似乎有人已经尝试解决该问题。我从以下位置提取了此代码:

从这里开始,就是将子例程绑定到另一个宏,以实现某种形式的自动化,或者按照您认为合适的方式拖放,或者执行任何对您有意义的操作

如果有帮助,请告诉我


~JOL

您可以在UserForm对象上使用“BeforeDragOver”事件来注册拖放操作,但它可以解释的唯一数据是存储在剪贴板上的文本。我不确定是否有解决此问题的方法…如您所述,触发DragDrop事件需要此事件在工作簿级别可用,但实际情况并非如此。DragDrop事件仅作为表单的一部分可用,而不是工作簿或工作表。实际上,我看到一些资源使我认为这是可能的,但我自己很难让它正常工作。你自己试过什么吗?这是一个例子。再说一次,我自己也不能让它工作,但这看起来很有希望。@Gaffi你在这方面成功了吗?显然,此拖放功能适用于添加到图纸中的对象(控件)。但它不适用于Excel
范围
单元格
工作表
对象本身?因此,OP答案的答案是-否,无法识别MS Excel
工作表的拖放事件,Iguess@Prokurors不,我自己没有找到解决方案。嗨,这段代码是关于把一些东西拖到控件上,而不是工作表本身。可能会有帮助,但接缝可能与OP要求的有所不同。。。
' Place file on textbox to display filename.
Private Sub TextBox1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

' Declare variable(s).
Dim eventvar1 As Integer '* Files Counter

' If an error occurs, go to the Error Handler.
On Error GoTo Error_Handle1
'Drag N' Drop Event Handler
If Data.GetFormat(vbCFFiles) = True Then
eventvar1 = Data.Files.Count
    If eventvar1 = 1 Then
        If InStr(1, LCase$(Data.Files(eventvar1)), ".xls") Then
            txtExcel.Text = Data.Files(eventvar1)
        End If
    End If
End If

   ' Error Handler
    Error_Handle1:
        If Err <> 0 Then
            Debug.Assert Err = 0
            Err.Clear
        End If
    End Sub
Range("A2").End(xlDown).Offset(1, 0).Value = TextBox1.Text