【问题标题】:We can't paste Excel ranges because the copy area and paste area aren't the same size我们无法粘贴 Excel 范围,因为复制区域和粘贴区域的大小不同
【发布时间】:2015-06-18 09:30:13
【问题描述】:

我想遍历 Worksheet1 中的 A 列并找到第一个具有指定文本“石油生产”的单元格。此单元格是我希望复制到 Worksheet2 的数组中的第一个单元格。这个单元格和数组的大小会不时改变,因此我使用了代码。然后我将它粘贴到 Worksheet2 中的单元格 B7 中,该单元格永远不会改变。

这是我的公式。我在ActiveSheet.Paste 行收到错误消息

Sub Test()
    Application.ScreenUpdating = False
    For Each Cell In Sheets("Sheet1").Range("A:A")
        If Cell.Value = "Oil Production" Then
            ActiveSheet.Cells.Select
            Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).Column)).Select
            Selection.Copy
            Sheets("Sheet2").Select
            Range("B7").Select
            ActiveSheet.Paste
        End If
    Next
End Sub

【问题讨论】:

  • ActiveSheet.Cells.Select 更改为Cell.Select 将解决您的直接问题。也就是说,这段代码在很多层面上都存在缺陷:禁用Application.ScreenUpdating = False 进行调试会让你看到你的问题;循环遍历整个 A 列是不必要且缓慢的;使用Select 是不必要的,缓慢而脆弱的see here on How
  • 感谢链接和 cmets

标签: vba excel


【解决方案1】:

调整区域大小:

Sub Test()
Dim MyRowCount As Long, MyColCount As Long
Application.ScreenUpdating = False
For Each Cell In Sheets("Sheet1").Range("A1:A" & Range("A" & Rows.count).end(xlup).row) 'This make it poll the used data rather than the whole column
    If Cell.Value = "Oil Production" Then
        ActiveSheet.Cells.Select
        With Range(ActiveCell, Cells(ActiveCell.End(xlDown).Row, ActiveCell.End(xlToRight).column))
            .Copy
            MyRowCount = .Rows.Count
            MyColCount = .Columns.Count
        End With
        Sheets("Sheet2").Select
        Range("B7").Resize(MyRowCount, MyColCount).PasteSpecial xlPasteAll
        'Do you need to flick back to Sheet1 after pasting?
    End If
Next
End Sub

我还为你挑选了一堆。

Range("A1").Select
Selection.Paste

可以写成

Range("A1").PasteSpecial XLPasteAll

您可以通过这种方式删除大多数选择,您可以看到我也使用您正在复制的范围完成了它

【讨论】:

  • 只是一个后续问题。当 A1 中没有数据时,此代码似乎无法正常工作。或者当列中有空单元格时。我在 Range("B7").Resize(MyRowCount, MyColCount).PasteSpecial xlPasteAll 行出现错误
  • 只需在粘贴之前放一个 if MyRowCount 0 AND MyColCount 0 then 和 End if 在它之后,如果它们没有设置为正值,那么显然没有要粘贴的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2016-09-29
相关资源
最近更新 更多