来自带有隐藏列的已过滤列表的Excel VBA副本

时间:2011-09-01 19:08:22

标签: excel-vba excel-2007 excel-2010 vba excel

试试这个。首先在表1中建立以下数据表

A   B   C   D
a1  b1  c1  d1
a2  b2  c2  d2
a3  b3  c3  d3
a4  b4  c4  d4
a5  b5  c5  d5

创建命名区域“Dateset”A2:D6。 在表上放置一个过滤器并隐藏列B并过滤表以仅显示第一行。

现在在数据集上测试以下代码:

 Sub DataCopy()
   Dim r
   For Each r In Names("Dateset").RefersToRange.Rows
      r.Copy Worksheets(2).Range("a65536").End(xlUp).Offset(1, 0)
   Next
 End Sub

我得到以下结果:

a1  c1  d1  
a2  b2  c2  d2
a3  b3  c3  d3
a4  b4  c4  d4
a5  b5  c5  d5

没有我得到的过滤器(正如预期的那样):

a1  b1  c1  d1
a2  b2  c2  d2
a3  b3  c3  d3
a4  b4  c4  d4
a5  b5  c5  d5

你能帮我找到所有数据的方法吗 - 也来自可见行?

聚苯乙烯。我也尝试过:

Dim c as Range
For Each c In Range("A2", Range("A6")).Cells
    Range(c, c.End(xlToRight)).Copy Worksheets(2).Range("A65536").End(xlUp).Offset(1, 0)
    c.EntireRow.Copy Worksheets(2).Range("A65536").End(xlUp).Offset(1, 0)
    Range(c, c.Offset(0, 5)).Copy Worksheets(2).Range("A65536").End(xlUp).Offset(1, 0)
Next

但没有成功...... 我已经在Excel 2007和2010中进行了测试。

2 个答案:

答案 0 :(得分:0)

这绝对看起来像个错误。

由于它只是第一行似乎是问题,你可以逐列复制那一行,但是将整行复制剩余的行:

Sub DataCopy()
    Dim r As Range
    Dim dest As Range
    For Each r In Names("DateSet").RefersToRange.Rows
        If r.Row = 2 Then
            For Each c In r.Columns
                Set dest = Worksheets(2).Cells(r.Row, c.Column)
                r.Cells(1, c.Column).Copy dest
            Next
        Else
            Set dest = Worksheets(2).Cells(r.Row, r.Column)
            r.Copy dest
        End If
    Next
End Sub

答案 1 :(得分:0)

这是黑暗中的刺:

 Sub DataCopy()

    Dim vArray As Variant

    vArray = Names("Dateset").RefersToRange.Value

    Worksheets(2).[A1].Resize(UBound(vArray, 1), UBound(vArray, 2)).Value = vArray

 End Sub

基本上你不应该在那些情况下复制那样的行,即隐藏和过滤的行。

如果您想要更好的答案,您应该准确描述您要做的事情。您的示例和解释令人困惑。无论如何对我来说:)我只是不明白你真正想要做什么。