Excel VBA从带有隐藏列的af筛选列表复制
试试这个。首先在第1页上建立以下数据表Excel VBA从带有隐藏列的af筛选列表复制,excel,excel-2007,excel-2010,vba,Excel,Excel 2007,Excel 2010,Vba,试试这个。首先在第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 创建命名区域“日期集”A2:D6。 在表上放置筛选器并隐藏列B,然后筛选表以仅显示第一行 现在在数据集上测试以下代码: Sub DataCopy() Dim r For Each r In Names("Dateset").RefersToRange.Rows
A B C D
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
a5 b5 c5 d5
创建命名区域“日期集”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
如果没有过滤器,我会得到(如预期的那样):
你能帮我找到一种方法来获取所有的数据吗?也可以从可见行中获取
另外,我也尝试过:
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
但是没有成功。。。
我已经在Excel2007和2010中进行了测试。这看起来确实像一个bug 由于似乎只有第一行有问题,因此可以逐列复制该行,但可以按整行复制其余行:
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
这是一个黑暗中的刺刀:
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
基本上,在这些情况下,您不应该复制这样的行(即隐藏行和筛选行)
如果你想要一个更好的答案,你应该准确地描述你正试图做什么。你的例子和解释令人困惑。对我来说:)我只是不明白你到底想做什么。谢谢,但我不确定它是否适用于我有数千行20列的实际问题。好的,请看我修改后的答案,它一次只复制第一行一个单元格,但是剩余的单元格是否一次一行。否-数据集中所有可见的行都有问题。我测试了我发布的代码,它返回了5行,每行4列,正如您所说的,没有过滤器。试试看,如果仍然不对,请告诉我。我想我会用另一种方法来解决这个问题。我想我将在复制行之前取消隐藏所有列,并在复制后再次隐藏它们。我不需要帮助,谢谢。好。。。我试图查看行列表,当满足条件时,我想将该行复制到另一个工作簿/工作表。我已经删除了问题中的条件以使其更简单。您是否尝试了我给您的代码?如果是,发生了什么?你得到了什么结果?这是你所期望的吗?我很高兴并想帮助你,但我不知道你想要什么,很抱歉,你的评论无助于澄清你的要求。没问题-我想我会用另一种方式解决这个问题。我想我将在复制行之前取消隐藏所有列,并在复制后再次隐藏它们。我不需要帮助。
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