问题在于对Range对象使用Activate方法时发生错误。
请注意:range的Activate方法激活单个单元格,该单元格必须处于当前选定区域内。要选择单元格区域,请使用 Select 方法。
很显然你的range并未处于选定区域就使用了activate方法。
其实你这个代码有很多“废话”,复制和选择性粘贴时,选中或激活单元格区域都是没必要的。事实上select这个方法在录制宏时才会在自动代码里出现,一般编写代码时基本不用。 我修改如下,请仔细体会。
Set pxl_copy = wb_report.Worksheets("公式") ''''复制pxl数据
Set pxl_range = pxl_copy.Range("B3:B40")
pxl_copy.Activate '可省略,如果省略对该工作表单元格的引用必须指明工作表。
For Each pxl_cell In pxl_range
If pxl_cell.Text = LotData Then
pxl = pxl_cell.Row
End If
Next
pxl_copy.Range("C" & pxl & ":AR" & pxl).copy
yield_copy.Range("AX" & day_row).PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats,Operation:=xlNone
Application.CutCopyMode = False
此外,如果pxl_range里如果有多个单元格文本为LotData,那么是否要把后面的操作放在循环里。这点要考虑下。
直接改成 .Activate ,不要前面的Range(...)
你的代码太过于繁琐,简单一点写的话,三到四句代码就可以写完了,你可以用下面的代码进行测试:
Dim Rng As Range
Set Rng = Sheets("公式").Range("B3:B40").Find("Lotdata", , , xlWhole)
If Not Rng Is Nothing Then
Rng.Resize(1, 42).Copy yield_copy.Range("Ax" & 1).Resize(1, 42)
End If