我可以获取Excel剪贴板数据的源范围吗?

mik*_*inz 6 clipboard vba excel-2003 clipboarddata

如果剪贴板包含 Excel 工作表范围,则可以使用 DataObject 对象访问该范围的数据

您还可以找到该数据的实际来源范围(即工作表、行和列)吗?

或者,您能否找到用虚线轮廓边框(不是选定范围)表示的上次复制范围?

最好使用 Excel 2003 VBA

end*_*and 2

不直接,不 - 剪贴板对象似乎只包含单元格的值(尽管 Excel 显然以某种方式记住了边框):

Sub testClipborard()

    Dim test As String
    Dim clipboard As MSForms.DataObject
    Set clipboard = New MSForms.DataObject

    clipboard.GetFromClipboard
    test = clipboard.GetText

    MsgBox (test)

End Sub
Run Code Online (Sandbox Code Playgroud)

请注意,您需要引用 Microsoft Forms 2.0 库才能运行此程序(如果单元格中没有值,它也会失败)。


话虽这么说,您可以尝试如下操作 - 将其添加到 VBA 编辑器中的模块中。

Public NewRange As String 
Public OldRange As String 
Public SaveRange As String 
Public ChangeRange As Boolean 
Run Code Online (Sandbox Code Playgroud)

并在工作表对象中使用以下内容

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 

     'save previous selection
    OldRange = NewRange 

     'get current selection
    NewRange = Selection.Address 

     'check if copy mode has been turned off
    If Application.CutCopyMode = False Then 
        ChangeRange = False 
    End If 

     'if copy mode has been turned on, save Old Range
    If Application.CutCopyMode = 1 And ChangeRange = False Then 
         'boolean to hold "SaveRange" address til next copy/paste operation
        ChangeRange = True 
         'Save last clipboard contents range address
        SaveRange = OldRange 
    End If 

End Sub 
Run Code Online (Sandbox Code Playgroud)

它看起来有效,但是,它也可能很容易出现不同的错误,因为它试图解决剪贴板的问题。 http://www.ozgrid.com/forum/showthread.php?t=66773