VBA - 将过滤后的数据值从一个工作簿复制到另一个工作簿

时间:2016-06-13 19:37:31

标签: vba copy clipboard

我将大量过滤后的数据(仅限可见数据和值)从一个工作簿复制到另一个工作簿,但过程非常缓慢。我想尝试绕过剪贴板,看看是否提高了速度,但我不断收到错误"对象不支持此属性或方法"。这是失败的代码:

ActiveSheet.SpecialCells(xlCellTypeVisible).Copy _
   Destination:=Windows("Some Report").Worksheets( _
                                 "Some Sheet").Range("A1").Values

我尝试了不同的变体,但收到了同样的错误。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我在没有实际使用SpecialCells(xlCellTypeVisible)方法的情况下完成了这项工作,并且它完美地复制和粘贴。我首先使用数组过滤数据,然后我只使用工作表(" Sheet1")。范​​围(" A1:"& last column& last row)。复制目标:=工作表(" Sheet2")。范​​围(" E5")方法,它在Office 2010上工作得很好。我确实研究了SpecialCells(xlCellTypeVisible)方法,但它从来没有必要。

也许你把UsedRange.SpecialCells(xlCellTypeVisible).Copy它可以工作吗?

答案 1 :(得分:0)

如果将cells.value设置为彼此相等呢?这个小片段假设您要将单元格复制到同一个目标单元格中​​,因此如果不是您正在进行的操作,则必须对其进行调整。

Private Sub worksheet_selectionchange(ByVal Target As Range)

    Dim lastRow As Integer
    Dim lastCol As Integer

    Dim wb1 As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Set wb1 = ThisWorkbook
    Set ws1 = wb1.Sheets(1)
    Set ws2 = wb1.Sheets(2)

    lastRow = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lastCol = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column

    For i = 1 To lastRow: For j = 1 To lastCol
        If ws1.Cells(i, j).Value > 5 And Not ws1.Cells(i, j).Hidden Then
            ws2.Cells(i, j).Value = ws1.Cells(i, j).Value
        End If
    Next: Next

End Sub

不幸的是,如果没有看到你的其他代码,我就无法证明其他的东西,但这是我所知道的复制和粘贴的唯一选择。