Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 我们可以';t粘贴Excel范围,因为复制区域和粘贴区域是';大小不一样_Vba_Excel - Fatal编程技术网

Vba 我们可以';t粘贴Excel范围,因为复制区域和粘贴区域是';大小不一样

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

我想循环浏览工作表1中的A列,找到第一个单元格,它有一个指定的文本“Oil Production”。此单元格是我希望复制到工作表2的数组中的第一个单元格。这个单元格和数组的大小会不时改变,因此我使用了代码。然后我将其粘贴到工作表2中的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
调整区域大小:

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,如果这些值未设置为正值,则显然没有要粘贴的数据。