运行Excel宏时报错误1004 方法 Range作用于对象 Worksheet时失败? 5
Setpxl_copy=wb_report.Worksheets("公式")''''复制pxl数据Setpxl_range=pxl_copy.Range("B3:B40"...
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
Application.CutCopyMode = False
With pxl_copy
.Range("C" & pxl).Activate(系统默认这句标黄了)
.Range("C" & pxl & ":AR" & pxl).Select
End With
Selection.Copy
With yield_copy
.Activate
.Range("AX" & day_row).Select
End With
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False 展开
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
Application.CutCopyMode = False
With pxl_copy
.Range("C" & pxl).Activate(系统默认这句标黄了)
.Range("C" & pxl & ":AR" & pxl).Select
End With
Selection.Copy
With yield_copy
.Activate
.Range("AX" & day_row).Select
End With
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False 展开
2个回答
展开全部
问题在于对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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询