Excel 从复制的筛选单元格中获取数据

Excel 从复制的筛选单元格中获取数据,excel,vba,Excel,Vba,如果我从筛选列复制一些单元格(仅包含数字),如何从VBA进一步引用这些数据 如果我尝试这样做: Dim DataObj As MsForms.DataObject Set DataObj = New MsForms.DataObject DataObj.GetFromClipboard Debug.Print DataObj.GetText(1) 我得到这个错误: DataObject:GetText Invalid FORMATETC structure 有没有其他方法可以从复制的过滤

如果我从筛选列复制一些单元格(仅包含数字),如何从VBA进一步引用这些数据

如果我尝试这样做:

Dim DataObj As MsForms.DataObject
Set DataObj = New MsForms.DataObject

DataObj.GetFromClipboard

Debug.Print DataObj.GetText(1)
我得到这个错误:

DataObject:GetText Invalid FORMATETC structure
有没有其他方法可以从复制的过滤单元格中访问数据?

这对我很有用

Sub Tester()

Dim DataObj As MsForms.DataObject
Dim rng As Range, c As Range, rngV As Range

    Set rng = Sheet1.Range("A2:A20") 'filtered range
    On Error Resume Next
    Set rngV = rng.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If rngV Is Nothing Then
        Debug.Print "No visible cells!"
        Exit Sub
    End If

    'using Clipboard
    rngV.Copy
    Set DataObj = New MsForms.DataObject
    DataObj.GetFromClipboard
    Debug.Print DataObj.GetText '>> vbCrLf-delimited string

    'direct read
    For Each c In rngV.Cells
        Debug.Print c.Value
    Next c


End Sub

GetText
中得到的是一个字符串,其中行中的值由vbTab分隔,行由vbCrLf分隔-如果需要数组,则可以编写一个函数将字符串转换为一个…这不是我在这里得到的结果(Excel 2013),而是错误消息。你是说你可以复制单元格,然后成功地使用
DataObj.GetText(1)
?我没有提到
GetText(1)
-这不起作用,因为
GetText
返回的是字符串,而不是数组。如果需要数组,则需要对字符串使用
Split()
来创建数组。你到底要怎么做取决于你要复制一个数组的列数,不管你想要的是一维数组还是二维数组。对不起,我不明白你想说什么。我没有绳子
GetText
不返回字符串-它会引发错误。因此,如果您从该行末尾删除(1),它仍然会出错?谢谢,但范围未知,选择不可用,否则我将使用
selection.SpecialCells(xlCellTypeVisible)
。我只想访问剪贴板中的数据,不需要硬编码范围,也不需要依赖选择(在Sub运行时不可用)。这不是解决问题的完整方案,只需要一些代码来说明
GetText
对我来说很好。从您的问题中我不清楚您是如何复制单元格的。我从筛选列中选择了几个单元格,然后按ctrl+c。然后我将光标移动到另一个单元格。现在我想运行VBA代码,并使用剪贴板中的数据。如果我在文本编辑器中粘贴剪贴板数据,然后选择并复制文本编辑器中的内容,我可以完美地使用
DataObj.GetText
。但是,对于从Excel工作表复制的剪贴板内容,我不能,我可以确认它对我有效,只要剪贴板中有东西。