Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
VBA筛选表并将结果列的子集复制到剪贴板_Vba_Excel_Filter_Copy Paste - Fatal编程技术网

VBA筛选表并将结果列的子集复制到剪贴板

VBA筛选表并将结果列的子集复制到剪贴板,vba,excel,filter,copy-paste,Vba,Excel,Filter,Copy Paste,我正在尝试将源表中的行和列的子集自动复制到剪贴板中,以便在其他应用程序中使用。我在表的标题上创建过滤器并正确过滤行,但不知道如何按照我想要的顺序选择列的子集。源表是A-L列,我希望在应用过滤器后,按该顺序将C、I、H和F列复制到剪贴板。下面包括一些代码(不包括复制部分) Sub exportExample() Dim header As Range Dim srcCol As Range Set header = [A5:L5] header.AutoFilt

我正在尝试将源表中的行和列的子集自动复制到剪贴板中,以便在其他应用程序中使用。我在表的标题上创建过滤器并正确过滤行,但不知道如何按照我想要的顺序选择列的子集。源表是A-L列,我希望在应用过滤器后,按该顺序将C、I、H和F列复制到剪贴板。下面包括一些代码(不包括复制部分)

Sub exportExample()
    Dim header As Range
    Dim srcCol As Range

    Set header = [A5:L5]

    header.AutoFilter
    header.AutoFilter 12, "Example", xlFilterValues

    'Copy out columns C, I, H and F of the resulting table in that order
End Sub

我知道如何复制列,但不知道如何按所需顺序复制列。非常感谢您的帮助!谢谢

这就是你正在尝试的吗?我已经对代码进行了注释,这样您在理解代码时就不会有任何问题

逻辑

  • 过滤数据
  • 创建临时工作表
  • 将过滤后的数据复制到临时工作表
  • 删除不必要的列(A、B、D、E、G、J、K、L)
  • 将相关列(C、F、H、I)重新排列为C、I、H和F
  • 删除末尾的临时工作表(IMP:阅读代码末尾的注释)
  • 代码(经过尝试和测试)

    屏幕截图

    在运行代码之前,请参阅表1

    带有过滤数据的临时工作表

    跟进

    要删除边框,可以将此代码添加到上述代码中

    With rngToCopy
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    end with
    

    将上述代码放在行
    Debug.Print rngToCopy.Address

    之后,您必须单独复制列,因为引用范围的对象要求单元格按顺序排列

    像这样的方法应该会奏效:

    activeworkbook.Sheets(1).Columns("C:C").copy activeworkbook.Sheets(2).Columns("A:A")
    activeworkbook.Sheets(1).Columns("I:I").copy activeworkbook.Sheets(2).Columns("B:B")
    activeworkbook.Sheets(1).Columns("H:H").copy activeworkbook.Sheets(2).Columns("C:C")
    activeworkbook.Sheets(1).Columns("F:F").copy activeworkbook.Sheets(2).Columns("D:D")
    
    那么你应该能够做到:

    activeworkbook.Sheets(2).Columns("A:D").copy 
    

    要将其放入剪贴板

    您可能需要在工作表的另一个区域(或新工作表)上按所需顺序逐列复制,然后复制整个范围。是否应该相反?我的意思是复制C~~>A,其他的也一样?第二行“B:a”中也有一个拼写错误?哦,是的,应该是另一种情况(也有固定的拼写错误)。谢谢你的回答。我会尝试这个方法,因为它有点简单。这很有效,谢谢!我需要修改代码以去除一些格式(表中的边框),但我应该能够找到它。不将标题行复制到临时工作表是一种快速更改吗?将此
    rngToCopy.copy wsTemp.Range(“A1”)
    更改为
    rngToCopy.copy
    ,并在下一行中放置此
    wsTemp.Range(“A1”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank:=False,转置:=False
    忽略最后的注释,我想出了如何修改代码来做到这一点。再次感谢你的帮助!!!好的,那一行将日期转换成整数。您想删除边框还是其他格式?
    activeworkbook.Sheets(2).Columns("A:D").copy