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

问题描述:

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

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

我试过不同的变化,但收到相同的错误。预先感谢您的帮助。

+0

我无法按照自己的意愿让它工作。我所做的工作就是设定一个范围相等。工作表(“一些报表”)工作表(“某些表”)范围(“A1:ZZ100”)。值=工作簿(“某个报表2”)。工作表(“某些表2”)。范围(“A1: ZZ100" )。这些值。这工作得很好,但我还没有能够使它与过滤的范围一起工作。任何人都可以做到这一点,而不必循环通过每个可见的行? – Peter

我没有使用SpecialCells(xlCellTypeVisible)方法来完成此操作,它完全复制和粘贴。 (“A1:”&最后一列&最后一行)。复制目的地:=工作表(“Sheet2”)。范围(“E5 “)方法,它在Office 2010上工作得很好。我确实查看了SpecialCells(xlCellTypeVisible)方法,但它从来没有必要。

也许如果你把UsedRange.SpecialCells(xlCellTypeVisible).Copy它会工作吗?

只要设置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 

不幸的是,没有看到很多其他代码的我不能证明太多别的,但这是复制和粘贴唯一的选择,我知道的。