Это интересный.
Я написал функцию, которая берет список данных и разделяет список на 2 рабочих листа.Первый содержит менее 90 дней до даты выставления счета, а второй содержит более 90 дней до даты выставления счета.Эта функция работает, как и ожидалось, для первого и второго списка, но для третьего списка (в том же формате, что и два других) ничего не происходит.
Рабочая книга имеет 7 страниц.
Страница 2 - первый список.Страница 3 для первого списка превышает 90.
Страница 4 - второй список.Страница 5 для второго списка больше 90.
Страница 6 - третий список.Страница 3 для третьего списка больше 90.
По какой-то причине функция работает без сбоев, пока не настало время работать со страницами 6 и 7.
Вот мой призыв кfunction:
Call split90(2, first_of_month, inv_wb)
Call split90(4, first_of_month, inv_wb)
Call split90(6, first_of_month, inv_wb)
1-й аргумент используется для определения того, над какой страницей выполняется работа.2-й аргумент - использование для передачи первой даты месяца.Третий аргумент используется для передачи рабочей книги, где функция будет манипулировать списком.
Вот функция:
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
Вышеописанное работает, как и ожидалось для списка 1 и 2, но когдаЯ передаю номер 6 для списка 3, он просто терпит неудачу.Ничего такого.Нет ошибок.Совсем ничего.Все мои тесты с Debug.Print()
показали, что по какой-то причине last_row
не получает присвоенное ему значение, когда start_sheet
является целым числом 6
.
Из приведенного выше Debug.Print
Iожидайте увидеть последнюю строку списка, напечатанную дважды для каждого вызова функции.Вместо этого я вижу, что последняя строка печатается дважды для первых двух списков и только один раз для второго списка.Это не имеет смысла для меня.
Вот результаты печати.
Before last_row: 20892
After last_row: 20892
Before last_row: 3098
After last_row: 3098
Before last_row: 35738
Как вы можете видеть по какой-то причине, переменной last_row
не присваивается значение дляпоследняя группа ... Но она может видеть номер до присвоения last_row
.