这是一个有趣的问题。
我编写了一个函数,它获取一个数据列表,并将该列表分为两个工作表。第一个包含发票日期前不到90天,第二个包含发票日期前超过90天。此函数在第一个和第二个列表中按预期工作,但在第三个列表(与其他两个列表的格式相同)中却无法执行任何操作。
工作手册有7页。
第4页是第2个列表。第5页是第2个列表的大于90页。
第6页是第3个列表。第7页是第3个列表的大于90页。
不管出于什么原因,函数都能正常工作,直到第6页和第7页开始工作。
下面是我对函数的调用:
Call split90(2, first_of_month, inv_wb)
Call split90(4, first_of_month, inv_wb)
Call split90(6, first_of_month, inv_wb)
第一个参数用于定义正在处理的页面。第二个参数用于传递月份的第一个日期。第三个参数用于传递工作簿,函数将在其中操作列表。
函数如下:
Function split90(start_sheet, first_of_month, inv_wb)
Dim rng_wk As Range
Dim last_row As Integer
Dim stop_row As Integer
Debug.Print ("Before last_row: " & inv_wb.Worksheets(start_sheet).Cells(Rows.Count, "C").End(xlUp).Row)
last_row = inv_wb.Worksheets(start_sheet).Cells(Rows.Count, "C").End(xlUp).Row
Debug.Print ("After last_row: " & last_row)
Set rng_wk = inv_wb.Worksheets(start_sheet).Range("C2:C" & last_row)
For Each cell In rng_wk
If Not IsEmpty(cell.Value) Then
If CDate(cell.Value) < CDate(first_of_month) - 90 And CDate(cell.Value) <> CDate("1/1/0001") Then
stop_row = cell.Row
Exit For
End If
End If
Next cell
Set rng_wk = inv_wb.Worksheets(start_sheet).Range("A" & stop_row & ":H" & last_row)
rng_wk.Cut Destination:=inv_wb.Worksheets(start_sheet + 1).Range("A2")
End Function
Debug.Print()
因为某种原因给我看了
last_row
start_sheet
6
.
Debug.Print
我希望看到列表的最后一行在每次调用函数时打印两次。相反,我看到的是前2个列表的最后一行打印了两次,第2个列表只打印了一次。这对我来说毫无意义。
这是打印结果。
Before last_row: 20892
After last_row: 20892
Before last_row: 3098
After last_row: 3098
Before last_row: 35738
最后一行
最后一行