试试这个。首先在表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中进行了测试。
答案 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
基本上你不应该在那些情况下复制那样的行,即隐藏和过滤的行。
如果您想要更好的答案,您应该准确描述您要做的事情。您的示例和解释令人困惑。无论如何对我来说:)我只是不明白你真正想要做什么。