excel 2007 vba中1004工作表类的粘贴方法失败

时间:2017-07-19 07:20:37

标签: excel vba excel-vba

以下代码在Excel 2016中运行良好,但在Excel 2007上运行时相同

  

工作表类的1004粘贴方法失败

遇到错误。

Sub productPicture()
    Sheet1.Select

    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastrow
        If Cells(i, 1) = ThisWorkbook.Sheets(2).Range("C4").Value Then
            ThisWorkbook.Sheets(1).Cells(i, 2).Copy
        End If

        Exit For
    Next i

    Sheet2.Select
    ThisWorkbook.Sheets(2).Range("D9:G17").Clear
    ThisWorkbook.Sheets(2).Range("D9:G17").Select
    ThisWorkbook.Sheets(2).Paste
End Sub

3 个答案:

答案 0 :(得分:1)

这是您的代码遵循最佳做法的方式。有关详细信息,请参阅代码中的注释。

set print static-members off

注意: 您也可以查看[Shai Rado的答案] [1],这是一种不同的,可能更可取的方法。

答案 1 :(得分:1)

您可以使用For功能,而不是使用Match循环扫描“A”列中的所有值,它可以节省宝贵的时间,一旦您开始学习如何使用它,它是VBA中最好的工具之一。

此外,更好的操作顺序是Clear Range您想要稍后粘贴的位置,然后您可以使用Copy>> {1}以1行语法显示,例如:

Paste

注意:我通常使用.Range("B" & MatchRow).Copy Destination:=ThisWorkbook.Sheets(2).Range("D9") 语句,它使代码看起来更好更短,所有WithRange对象都是完全限定的使用Cells对象。 (而不是使用Worksheet,这是不推荐的。)

<强> 代码

Select

答案 2 :(得分:0)

Sub productPicture()
Sheet1.Select

Lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Lastrow
    If Cells(i, 1) = ThisWorkbook.Sheets(2).Range("C4").Value Then
            Sheet2.Select
            ThisWorkbook.Sheets(2).Range("D9:G17").Clear
            ThisWorkbook.Sheets(2).Range("D9:G17").Select

            ThisWorkbook.Sheets(1).Cells(i, 2).Copy
            Selection.PasteSpecial xlPasteAll
    End If

    Exit For
Next i

End Sub