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,如果使用H列标题中的命令按钮将值Complete或Closed Complete输入H列,该vba将自动将整行从邮件日志工作表移动到已完成的日志工作表 命令按钮正在工作,但由于某种奇怪的原因,当它将行粘贴到完成的日志中时,它没有将行粘贴到下一个可用行上,而是将行粘贴到第1048542行的工作表底部。此外,我只设法使它为“Complete”值工作,而没有为Closed Complete值工作 有人能帮忙吗 我已附上我的电子表格示例,我当前的VBA代码如下: Private Su

我一直在使用vba,如果使用H列标题中的命令按钮将值Complete或Closed Complete输入H列,该vba将自动将整行从邮件日志工作表移动到已完成的日志工作表

命令按钮正在工作,但由于某种奇怪的原因,当它将行粘贴到完成的日志中时,它没有将行粘贴到下一个可用行上,而是将行粘贴到第1048542行的工作表底部。此外,我只设法使它为“Complete”值工作,而没有为Closed Complete值工作

有人能帮忙吗

我已附上我的电子表格示例,我当前的VBA代码如下:

Private Sub CommandButton1_Click()

Dim Check As Range, r As Long, lastrow2 As Long, lastrow As Long
    Application.ScreenUpdating = False
        lastrow = Worksheets("Mailing LOG").UsedRange.Rows.Count
            lastrow2 = Worksheets("Completed Log").UsedRange.Rows.Count
                If lastrow2 = 1 Then lastrow2 = 0
                    For r = lastrow To 2 Step -1
                        If Range("H" & r).Value = "Complete" Then
                            Rows(r).Cut Destination:=Worksheets("Completed Log").Range("A" & lastrow2 + 1)
            lastrow2 = lastrow2 + 1
            Else:
        End If
    Next r
Application.ScreenUpdating = True
End Sub

试试这个。UsedRange并不总是像预期的那样工作,因为它可以包含以前格式化的单元格。我还为您的代码添加了一些工作表引用,以提高代码的清晰度,并确保您的代码在任何工作表处于活动状态时都能按预期工作

Private Sub CommandButton1_Click()

Dim Check As Range, r As Long, lastrow2 As Long, lastrow As Long

Application.ScreenUpdating = False

lastrow = Worksheets("Mailing LOG").UsedRange.Rows.Count

For r = lastrow To 2 Step -1
    If Worksheets("Mailing LOG").Range("H" & r).Value = "Complete" Then
        Worksheets("Mailing LOG").Rows(r).Cut Destination:=Worksheets("Completed Log").Range("A" & Rows.Count).End(xlUp)(2)
    End If
Next r

Application.ScreenUpdating = True

End Sub

谢谢,这太棒了,我还需要添加Closed Complete的值,但是当我使用OR将Complete和Complete分开时,这不起作用。不确定您想要做什么,但如果WorksheetsMail LOG.RangeH&r.value=Complete或WorksheetsMail LOG.RangeH&r.value=Closed,则是这样表述的