【问题标题】:Listening for mouse (drag-and-drop) events in MS Excel在 MS Excel 中侦听鼠标(拖放)事件
【发布时间】:2012-05-09 16:47:36
【问题描述】:

有没有办法识别 MS Excel 工作表上的拖放事件?我正在寻找的是能够在您将文件(例如从桌面)拖放到 MS Excel 工作表中的单元格上(并将文件名插入到单元格中)时能够收听事件。

这完全可以用 Excel 宏来实现吗?

【问题讨论】:

  • 您可以使用 UserForm 对象上的“BeforeDragOver”事件来注册拖放操作,但它可以解释的唯一数据是存储在剪贴板上的文本。我不确定这个是否有解决方案......
  • 如您所述触发 DragDrop 事件要求此事件在工作簿级别可用,但情况并非如此。 DragDrop 事件仅作为表单的一部分提供,而不是工作簿或工作表。
  • 我实际上看到了一些资源,让我认为这可能的,但我自己无法让它发挥作用。你自己尝试过什么吗? Link from MSDN 就是一个例子。再说一次,我自己也不能让它发挥作用,但这看起来很有希望。
  • @Gaffi 你在这方面有什么成功吗?似乎这种拖放功能适用于添加到工作表的对象(控件)。但它不适用于 Excel RangeCellWorksheet 对象本身?所以,OP 答案的答案是 - 不,我猜无法识别 MS Excel Worksheet 的拖放事件
  • @Prokurors 不,我自己没有解决这个问题。

标签: events vba excel drag-and-drop


【解决方案1】:

我自己不确定如何执行该任务 - 但是,似乎有人已经尝试解决该问题。我从vbadud.blogspot 中提取了这段代码:

' 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

如果将文件放入文本框中,代码将发布文件的名称。您可以使用方法、函数甚至单独的子程序来使用已放入文本框中的文本。

例如,在将文本从文本框复制到单元格时检查 SO article,您可以使用此代码将文本输入到 Excel 工作表上的范围中:

Range("A2").End(xlDown).Offset(1, 0).Value = TextBox1.Text 

从那里开始,它的问题是将子例程绑定到另一个宏以实现一种或另一种自动化形式,根据您的需要进行拖放或任何对您有意义的操作。

如果有帮助,请告诉我,

~JOL

【讨论】:

  • 嗨,这段代码似乎是关于将一​​些东西拖到控件上,而不是工作表本身。可能会有所帮助,但接缝与 OP 所要求的有所不同......
猜你喜欢
  • 2013-06-22
  • 2020-05-10
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多