以下代码在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
答案 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")
语句,它使代码看起来更好更短,所有With
和Range
对象都是完全限定的使用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