Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 列为空时自动将行复制到单独的工作表中(以跟踪应收账款)_Excel_Vba - Fatal编程技术网

Excel 列为空时自动将行复制到单独的工作表中(以跟踪应收账款)

Excel 列为空时自动将行复制到单独的工作表中(以跟踪应收账款),excel,vba,Excel,Vba,我们有一个名为Shipsheet的工作簿,在该工作簿中,我们有一个名为“Shipsheet 2015”的工作表,其中我们跟踪所有发票。对于尚未付款的发票(已付款列(H列)中没有“X”的发票),我们手动将发票添加到同一工作簿中名为“现金流”的单独工作表中,该工作表按时间顺序排列。换句话说,逾期时间最长的发票显示在现金流工作表的顶部。我还注意到,我们对不同的客户有不同的条款,我们在2015年船单G栏中记录了这些条款:“净10”、“净30”或“收到时到期” 我想从2015年船单中自动填充现金流。我希望

我们有一个名为Shipsheet的工作簿,在该工作簿中,我们有一个名为“Shipsheet 2015”的工作表,其中我们跟踪所有发票。对于尚未付款的发票(已付款列(H列)中没有“X”的发票),我们手动将发票添加到同一工作簿中名为“现金流”的单独工作表中,该工作表按时间顺序排列。换句话说,逾期时间最长的发票显示在现金流工作表的顶部。我还注意到,我们对不同的客户有不同的条款,我们在2015年船单G栏中记录了这些条款:“净10”、“净30”或“收到时到期”

我想从2015年船单中自动填充现金流。我希望现金流自动排序,最长过期发票在顶部

我在这里搜索了许多线程,这些线程显示了创建代码的各种方法,如果满足某些条件,这些代码会将行复制到另一个工作表中,但我还没有找到让它们正常工作的方法

我的参数是:

  • 如果2015年发货单中的H列为空,则将该行复制到现金流工作表中。理想情况下,我只想将A、C、G、M和N列复制到现金流工作表中,因为不需要其他列

  • 发票的到期日期取决于发票日期(2015年船单B栏)和G栏的条款。因此,2015年11月15日的发票(净10个条款)应于2015年11月25日到期。如上所述,我希望现金流自动排序,最长过期发票在顶部

在尝试对行中的特定单元格进行排序和复制之前,这里是我刚刚开始尝试的内容

子复制行()


结尾子

您似乎正在逐个检查每个行(并且可选地复制它)的循环,但是我希望看到您考虑。这是一个批量操作,通常比每行循环更快

Sub Ship_to_CashFlow()
    Dim wsCF As Worksheet

    'set the receiving worksheet
    Set wsCF = Worksheets("Cash Flow")

    With Worksheets("SHIPSHEET 2015")
        'if the worksheet has a filter active, turn it off
        If .AutoFilterMode Then .AutoFilterMode = False

        'use the region specified by selecting A1 and tapping Ctrl+A once
        With .Cells(1, 1).CurrentRegion
            'filter for blanks in the 8th column (H)
            .AutoFilter field:=8, Criteria1:="="
            'move down one row to discard the header row
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                'Are there any visible cells?
                If CBool(Application.Subtotal(103, .Cells)) Then
                    'copy them to to the next blank row in the CF worksheet
                    .Copy Destination:=wsCF.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                End If
            End With
            'turn off the filter
            .AutoFilter field:=8
        End With
    End With
End Sub
它对由定义的数据区域起作用。一系列隔离正在检查和处理的工作表区域的操作


排序可能需要某种类型的“帮助器”列,该列将提供一个包含发票日期列B和列G中的条款的公式的数字。

谢谢……我在您的筛选建议中有点迷失了方向,取而代之的是:

Sub cond_copy()
    Sheets("2015 SHIPSHEET").Select
    RowCount = Cells(Cells.Rows.Count, "a").End(xlUp).Row
    Set Rng = Selection
    For i = 1 To RowCount
        Range("h" & i).Select
        check_value = ActiveCell
        If check_value = "" Or check_value = "" Then
            ActiveCell.EntireRow.Copy
            Sheets("Sheet1").Select
            RowCount = Cells(Cells.Rows.Count, "a").End(xlUp).Row
            Range("a" & RowCount + 1).Select
            ActiveSheet.Paste
            Sheets("2015 SHIPSHEET").Select
        End If
    Next
End Sub
但是现在,我宁愿只在选定的行上运行它,而不是在整个2015年发货单上运行它。我试着加上

Set Rng = Selection

但这不起作用,它仍然在整张纸上运行。关于如何在选定行上运行此操作,您有什么建议吗?

请显示您已尝试过的内容。所以这不是一个为我编写代码的网站,而是一个发现和克服错误的非常有用的工具。
Set Rng = Selection