运行Excel宏时报错误1004 方法 Range作用于对象 Worksheet时失败?

2024-12-14 15:44:31
推荐回答(2个)
回答1:

问题在于对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,那么是否要把后面的操作放在循环里。这点要考虑下。

回答2:

直接改成 .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