Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA从带有隐藏列的af筛选列表复制_Excel_Excel 2007_Excel 2010_Vba - Fatal编程技术网

Excel VBA从带有隐藏列的af筛选列表复制

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

试试这个。首先在第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
      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