VBA:复制值运行时错误1004

VBA:复制值运行时错误1004,vba,excel,Vba,Excel,我试图根据子字符串值将第六张图纸中的范围复制到第一张或第三张图纸。当我尝试使用此代码时,我得到一个“运行时错误'1004'”。我试图找到一个解决方案——我能找到的唯一可能的答案是添加一个ThisWorkbook.Save,但这并没有改变结果 Dim LastRow As Long 'Finds last row With ActiveSheet LastRow = .Cells(.Rows.count, "A").End(xlUp).Row End With 'Iterates th

我试图根据子字符串值将第六张图纸中的范围复制到第一张或第三张图纸。当我尝试使用此代码时,我得到一个“运行时错误'1004'”。我试图找到一个解决方案——我能找到的唯一可能的答案是添加一个
ThisWorkbook.Save
,但这并没有改变结果

Dim LastRow As Long

'Finds last row
With ActiveSheet
    LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
End With

'Iterates through rows in column A, and copies the row into proper sheet depending on "H" or "L"
For i = 4 To LastRow
    If InStr(1, Range("A" & i), "L") <> 0 Then
        ThisWorkbook.Worksheets(1).Range(Cells(i, 9), Cells(i, 48)).Value = ThisWorkbook.Worksheets(6).Range(Cells(i, 1), Cells(i, 40)).Value
    ElseIf InStr(1, Range("A" & i), "H") <> 0 Then
        ThisWorkbook.Worksheets(3).Range(Cells(i, 9), Cells(i, 48)).Value = ThisWorkbook.Worksheets(6).Range(Cells(i, 1), Cells(i, 40)).Value
    End If
Next i

'Message Box when tasks are completed
    MsgBox "Complete"
编辑

多亏了下面回答的人的帮助,我才能够解决这个问题。我从
.Range
中删除了
.Cells
,并通过
.Range(“I”&y1&“:AV”&y1)
引用了我想要的单元格(更改的第一个示例)。此外,我还改变了我引用工作表的方式,因为我将它们定义为变量
wsR
wsL
wsH
。还添加到
With
/
End With
语句中

Private Sub CommandButton2_Click()


Dim LastRow As Long
Dim wsR As Worksheet
Dim wsL As Worksheet
Dim wsH As Worksheet
Dim y1 As Integer
Dim y2 As Integer

'Set row value for light chain
y1 = 4
'Set row value for heavy chain
y2 = 4

'Set raw data worksheet
Set wsR = ThisWorkbook.Worksheets(6)
'Set light chain worksheet
Set wsL = ThisWorkbook.Worksheets(1)
'Set heavy chain worksheet
Set wsH = ThisWorkbook.Worksheets(3)

'Finds last row
With wsR
    LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
End With

'Iterates through rows in column A, and copies the row into proper sheet depending on "H" or "L"
For i = 4 To LastRow
    'Checks for "L" for light chain
    If InStr(1, Range("A" & i), "L") <> 0 Then
        With wsL
            .Range("I" & y1 & ":AV" & y1).Value = wsR.Range("A" & i & ":AN" & i).Value
        End With
        y1 = y1 + 1
    'Checks for "H" for heavy chain
    ElseIf InStr(1, Range("A" & i), "H") <> 0 Then
        With wsH
            .Range("I" & y2 & ":AV" & y2).Value = wsR.Range("A" & i & ":AN" & i).Value
        End With
        y2 = y2 + 1
    End If
Next i

'Message Box when tasks are completed
    MsgBox "Complete"


End Sub
Private子命令按钮2\u单击()
最后一排一样长
将wsR设置为工作表
将wsL设置为工作表
将wsH设置为工作表
作为整数的Dim y1
Dim y2作为整数
'为轻链设置行值
y1=4
'为重链设置行值
y2=4
'设置原始数据工作表
设置wsR=此工作簿。工作表(6)
'设置轻链工作表
设置wsL=This工作簿。工作表(1)
'设置重链工作表
设置wsH=This工作簿。工作表(3)
'查找最后一行
使用wsR
LastRow=.Cells(.Rows.count,“A”).End(xlUp).Row
以
'遍历列A中的行,并根据“H”或“L”将该行复制到适当的工作表中
对于i=4到最后一行
'检查轻链的“L”
如果仪表(1,量程(“A”和i),“L”)为0,则
与wsL
.Range(“I”&y1&“:AV”&y1).Value=wsR.Range(“A”&I&“:AN”&I).Value
以
y1=y1+1
'检查重链的“H”
ElseIf InStr(1,范围(“A”和“i”),“H”)0然后
与wsH
.Range(“I”&y2&“:AV”&y2).Value=wsR.Range(“A”&I&“:AN”&I).Value
以
y2=y2+1
如果结束
接下来我
'任务完成时的消息框
MsgBox“完成”
端接头

这是一个非常常见的问题-您没有向单元格添加工作表引用(并且并非所有范围都符合要求,您应该对此进行补救)

subx()
将最后一行调整为长,ws为工作表
设置ws=This工作簿。工作表(6)
'查找最后一行
使用ActiveSheet
LastRow=.Cells(.Rows.Count,“A”).End(xlUp).Row
以
'遍历列A中的行,并根据“H”或“L”将该行复制到适当的工作表中
对于i=4到最后一行
如果仪表(1,量程(“A”和i),“L”)为0,则
使用此工作簿。工作表(1)
.Range(.Cells(i,9),.Cells(i,48)).Value=ws.Range(ws.Cells(i,1),ws.Cells(i,40)).Value
以
ElseIf InStr(1,范围(“A”和“i”),“H”)0然后
使用此工作簿。工作表(3)
.Range(.Cells(i,9),.Cells(i,48)).Value=ws.Range(ws.Cells(i,1),ws.Cells(i,40)).Value
以
如果结束
接下来我
'任务完成时的消息框
MsgBox“完成”
端接头

这是一个非常常见的问题-您没有向单元格添加工作表引用(并且并非所有范围都符合要求,您应该对此进行补救)

subx()
将最后一行调整为长,ws为工作表
设置ws=This工作簿。工作表(6)
'查找最后一行
使用ActiveSheet
LastRow=.Cells(.Rows.Count,“A”).End(xlUp).Row
以
'遍历列A中的行,并根据“H”或“L”将该行复制到适当的工作表中
对于i=4到最后一行
如果仪表(1,量程(“A”和i),“L”)为0,则
使用此工作簿。工作表(1)
.Range(.Cells(i,9),.Cells(i,48)).Value=ws.Range(ws.Cells(i,1),ws.Cells(i,40)).Value
以
ElseIf InStr(1,范围(“A”和“i”),“H”)0然后
使用此工作簿。工作表(3)
.Range(.Cells(i,9),.Cells(i,48)).Value=ws.Range(ws.Cells(i,1),ws.Cells(i,40)).Value
以
如果结束
接下来我
'任务完成时的消息框
MsgBox“完成”
端接头

此赋值语句的左侧和右侧都以限定范围开始(分别是
工作表(3)
工作表(6)
)的一部分),但是使用
单元格
方法的动态赋值会导致失败,因为
单元格
作为隐藏的
全局命名空间的一部分,指的是
ActiveSheet.Cells

无论哪个工作表处于活动状态,此语句都将失败,因为无法计算该语句的一侧或另一侧。

此赋值语句的左侧和右侧都以限定范围开始(分别是
工作表(3)
工作表(6)
)的一部分),但是使用
单元格
方法的动态赋值会导致失败,因为
单元格
作为隐藏的
全局命名空间的一部分,指的是
ActiveSheet.Cells


无论哪个工作表处于活动状态,此语句都将失败,因为无法评估该语句的一方或另一方。

谢谢,但“合格”是什么意思?如有工作表引用。您使用
ThisWorkbook.Worksheets(1).Range完成了部分操作,但如果省略,代码将假定您指的是活动工作表,因此您的范围最终由不同工作表中的单元格组成,因此会出现错误。请注意,我已经为范围/单元格的每个实例添加了一个工作表引用(除了那些我不确定哪个是相关工作表的实例)。谢谢,但是“合格”是什么意思?因为有一个工作表引用。您使用
ThisWorkbook.Worksheets(1).Range完成了部分操作,但如果省略,代码将假定您指的是活动工作表,因此您的范围最终由不同工作表中的单元格组成,因此会出现错误。请注意,我已为范围/单元格的每个实例添加了一个工作表引用(我不确定哪个是相关工作表的情况除外)。有关此常见问题的详细讨论,请参阅。有关扩展讨论,请参阅
Private Sub CommandButton2_Click()


Dim LastRow As Long
Dim wsR As Worksheet
Dim wsL As Worksheet
Dim wsH As Worksheet
Dim y1 As Integer
Dim y2 As Integer

'Set row value for light chain
y1 = 4
'Set row value for heavy chain
y2 = 4

'Set raw data worksheet
Set wsR = ThisWorkbook.Worksheets(6)
'Set light chain worksheet
Set wsL = ThisWorkbook.Worksheets(1)
'Set heavy chain worksheet
Set wsH = ThisWorkbook.Worksheets(3)

'Finds last row
With wsR
    LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
End With

'Iterates through rows in column A, and copies the row into proper sheet depending on "H" or "L"
For i = 4 To LastRow
    'Checks for "L" for light chain
    If InStr(1, Range("A" & i), "L") <> 0 Then
        With wsL
            .Range("I" & y1 & ":AV" & y1).Value = wsR.Range("A" & i & ":AN" & i).Value
        End With
        y1 = y1 + 1
    'Checks for "H" for heavy chain
    ElseIf InStr(1, Range("A" & i), "H") <> 0 Then
        With wsH
            .Range("I" & y2 & ":AV" & y2).Value = wsR.Range("A" & i & ":AN" & i).Value
        End With
        y2 = y2 + 1
    End If
Next i

'Message Box when tasks are completed
    MsgBox "Complete"


End Sub
Sub x()

Dim LastRow As Long, ws As Worksheet

Set ws = ThisWorkbook.Worksheets(6)

'Finds last row
With ActiveSheet
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

'Iterates through rows in column A, and copies the row into proper sheet depending on "H" or "L"
For i = 4 To LastRow
    If InStr(1, Range("A" & i), "L") <> 0 Then
        With ThisWorkbook.Worksheets(1)
            .Range(.Cells(i, 9), .Cells(i, 48)).Value = ws.Range(ws.Cells(i, 1), ws.Cells(i, 40)).Value
        End With
    ElseIf InStr(1, Range("A" & i), "H") <> 0 Then
        With ThisWorkbook.Worksheets(3)
            .Range(.Cells(i, 9), .Cells(i, 48)).Value = ws.Range(ws.Cells(i, 1), ws.Cells(i, 40)).Value
        End With
    End If
Next i

'Message Box when tasks are completed
    MsgBox "Complete"

End Sub
ThisWorkbook.Worksheets(3).Range(Cells(i, 9), Cells(i, 48)).Value  = _
    ThisWorkbook.Worksheets(6).Range(Cells(i, 1), Cells(i, 40)).Value