Vba 我们可以';t粘贴Excel范围,因为复制区域和粘贴区域是';大小不一样
我想循环浏览工作表1中的A列,找到第一个单元格,它有一个指定的文本“Oil Production”。此单元格是我希望复制到工作表2的数组中的第一个单元格。这个单元格和数组的大小会不时改变,因此我使用了代码。然后我将其粘贴到工作表2中的B7单元格中,该单元格永远不会更改 这是我的公式。我在第Vba 我们可以';t粘贴Excel范围,因为复制区域和粘贴区域是';大小不一样,vba,excel,Vba,Excel,我想循环浏览工作表1中的A列,找到第一个单元格,它有一个指定的文本“Oil Production”。此单元格是我希望复制到工作表2的数组中的第一个单元格。这个单元格和数组的大小会不时改变,因此我使用了代码。然后我将其粘贴到工作表2中的B7单元格中,该单元格永远不会更改 这是我的公式。我在第ActiveSheet.Paste行得到错误 Sub Test() Application.ScreenUpdating = False For Each Cell In Sheets("She
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
调整区域大小:
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
您可以通过这种方式切掉大多数选择,您可以看到我也在您复制的范围内完成了这项操作更改ActiveSheet.Cells。选择
到Cell。选择
将解决您当前的问题。也就是说,这段代码在很多方面都有缺陷:禁用Application.screenUpdate=False
进行调试会让您看到问题;在整个A列上循环是不必要且缓慢的;使用Select
是不必要的、缓慢且脆弱的,感谢链接和评论只是一个后续问题。当A1中没有数据时,此代码似乎无法正常工作。或者当列中有空单元格时。我在行范围(“B7”)处出错。调整大小(MyRowCount,MyColCount)。粘贴特殊XLPastell只需在粘贴前放置if MyRowCount 0和MyColCount 0,然后在粘贴后放置End if,如果这些值未设置为正值,则显然没有要粘贴的数据。