2012-05-09 100 views
4

有沒有辦法識別MS Excel工作表上的拖放事件?我在尋找的是能夠在將文件(例如從桌面)拖放到MS Excel工作表中的單元格(並將文件的名稱插入單元格)時收聽事件。在MS Excel中收聽鼠標(拖放)事件

這可以通過Excel宏來實現嗎?

+0

您可以使用一個用戶窗體對象的「BeforeDragOver」事件註冊的拖放動作,但它可以解釋的唯一數據是文本它存儲在剪貼板上。我不確定是否有解決方案... –

+1

如上所述觸發DragDrop事件需要在Workbook級別提供此事件,但事實並非如此。 DragDrop事件僅可用作表單的一部分,而不是工作簿或工作表。 – Ahmad

+0

我實際上看到了一些資源,這讓我認爲這是可能的,但是我有麻煩讓自己無法工作。你有沒有嘗試過自己? [從MSDN鏈接](http://msdn.microsoft.com/en-us/library/gg264583.aspx)就是一個例子。再一次,我無法完全讓它自己工作,但這看起來很有希望。 – Gaffi

回答

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 

從那裏,它的一個問題要麼將子程序綁定到另一個宏的自動化或其他形式,要麼按照你認爲合適的方式拖放,要麼對你有意義。

讓我知道是否有幫助,

〜約爾

+0

嗨,這段代碼接縫是關於拖動一些東西的控制,而不是工作表本身。可能會有幫助,但接縫與OP所要求的不同。 – Prokurors