Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将完成的行移动到其他图纸的VBA代码会导致奇怪的行为_Excel_Vba - Fatal编程技术网

Excel 将完成的行移动到其他图纸的VBA代码会导致奇怪的行为

Excel 将完成的行移动到其他图纸的VBA代码会导致奇怪的行为,excel,vba,Excel,Vba,免责声明:我不太精通VBA,通过阅读各种博客等,拼凑了以下代码 我的代码“有效”,因为它将状态更改为“完成”的行从活动工作表移动到已完成工作表。这就是代码的要点 当我使用拖动按钮(黑色的小角落)在源工作表(活动工作表)上创建另一行时,问题就出现了。出于某种原因,它将标题行从活动图纸复制到已完成图纸上的新行 这一定是由于复制和粘贴操作,但我不确定它与拖动表以创建行(如果有的话)有什么关系。任何帮助或指导这个VBA业余爱好者将不胜感激 Private Sub Worksheet_Change(ByV

免责声明:我不太精通VBA,通过阅读各种博客等,拼凑了以下代码

我的代码“有效”,因为它将状态更改为“完成”的行从活动工作表移动到已完成工作表。这就是代码的要点

当我使用拖动按钮(黑色的小角落)在源工作表(活动工作表)上创建另一行时,问题就出现了。出于某种原因,它将标题行从活动图纸复制到已完成图纸上的新行

这一定是由于复制和粘贴操作,但我不确定它与拖动表以创建行(如果有的话)有什么关系。任何帮助或指导这个VBA业余爱好者将不胜感激

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    Application.EnableEvents = False
    'If Cell that is edited is in column H and the value is Done
    If Target.Column = 8 And Target.Value = "Done" Then
        'Define last row on completed worksheet to know where to place the row of data
        LrowCompleted = Sheets("Completed").Cells(Rows.Count, "B").End(xlUp).Row
        'Copy and paste data
        Range("B" & Target.Row & ":K" & Target.Row).Copy Sheets("Completed").Range("B" & LrowCompleted + 1)
        'Delete Row from Project List
        Range("B" & Target.Row & ":K" & Target.Row).Delete xlShiftUp
    End If
    Application.EnableEvents = True
End Sub

错误恢复下一步
隐藏潜在错误。例如,如果
Target
是多单元格范围,则
Target.Value=“Done”
将抛出错误

或许可以尝试以下方法:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 8 Then Exit Sub
    If Target.CountLarge <> 1 Then Exit Sub

    On Error GoTo SafeExit
    Application.EnableEvents = False
    If Target.Value = "Done" Then
        Dim LrowCompleted as Long
        LrowCompleted = Sheets("Completed").Cells(Rows.Count, "B").End(xlUp).Row

        Me.Range("B" & Target.Row & ":K" & Target.Row).Copy ThisWorkbook.Sheets("Completed").Range("B" & LrowCompleted + 1)

        Me.Range("B" & Target.Row & ":K" & Target.Row).Delete xlShiftUp
    End If

SafeExit:
    Application.EnableEvents = True
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标为。第8列,则退出Sub
如果Target.CountLarge 1,则退出Sub
错误转到安全出口
Application.EnableEvents=False
如果Target.Value=“完成”,则
Dim LROW已完成,长度为
LrowCompleted=工作表(“已完成”)。单元格(行数,“B”)。结束(xlUp)。行
Me.Range(“B”和Target.Row&“:K”和Target.Row)。复制此工作簿。工作表(“已完成”)。Range(“B”和LrowCompleted+1)
Me.Range(“B”和Target.Row&“:K”和Target.Row)。删除xlShiftUp
如果结束
安全出口:
Application.EnableEvents=True
端接头

错误恢复下一步
隐藏潜在错误。最好实现真正的错误处理。例如,如果
Target
是多单元格范围,则会出现错误。