Макрос Excel для извлечения строк, в зависимости от значения предыдущих дней и 30 пунктов плюс полная категория? - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть файл excel, который первоначально импортирует данные о запасах из нашей облачной бухгалтерской программы через веб-запрос .iqy.

Заголовки столбцов:

A1= Quantity B1= Item C1= Description D1= Bin Code

Теперь я создал макрос, который;

  1. Ссылка на данные

     Range("A1").QueryTable.Refresh False
    
  2. Удалить все нулевые акции

     Dim intRow
     Dim intLastRow
     intLastRow = Range("A65536").End(xlUp).Row
     For intRow = intLastRow To 1 Step -1
     Rows(intRow).Select
     If Cells(intRow, 1).Value = 0 Or Cells(intRow, 1) = "" Then
     Cells(intRow, 1).Select
     Selection.EntireRow.Delete
     End If
     Next intRow
    
  3. Автосортировка по бин-коду

     Range("A1:D1").Select
     Selection.AutoFilter
     Range("A2").Select
     Range("A1:D1668").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:= _
     xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
     DataOption1:=xlSortNormal
    
  4. Сохранить основной список

     Dim sFileName As String, sPath As String
     sPath = "C:\stock\ms\Master List " 
     sFileName = Format(Now(), "dd'mm'yy")
     ActiveWorkbook.SaveAs (sPath & sFileName)
    

Теперь это хитрый бит,

Необходимо проверять не менее 30 предметов в день, однако корзина не может быть неполной! Таким образом, после выбора 30 элементов сценарий должен проверить, находится ли следующий элемент в той же корзине, что и 30-й элемент, и включить его в извлечение. Допустим, элемент 30 находится в ячейке 10A2, а также элементы 31, 32, 33, 34, поэтому все 34 элемента (строки) необходимо извлечь в новую рабочую книгу и сохранить.

Этот процесс должен начинаться с образца предыдущих дней, поэтому механика должна выглядеть следующим образом:

  1. посмотрите в c \ stock \ sl \ Sample List -1 dd'mm'yy примерный список за -1 день, посмотрите на номер корзины последнего элемента, скажем 10A1,

  2. взять номер корзины следующих строк, 10A2,

  3. из первого ряда, который имеет 10A2, выберите 30 рядов,

  4. Продолжить, пока не изменится номер корзины.

  5. сохранить этот файл как образец списка dd'mm'yy в c \ stock \ sl \

  6. список образцов электронной почты dd'mm'yy на NNN@NNN.com

Это должно быть в состоянии повторить. Также в субботу и воскресенье компания не работает, поэтому по понедельникам она должна оглядываться на пятницу и т. Д., Также с учетом государственных праздников.

Любая помощь с этим может быть спасением? Я не против, если вы хотите изменить имена файлов, чтобы решить эту проблему с праздниками. Однако где-то для файлов должна быть указана временная метка.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Возможно, вы захотите проверить Dictionary объект , это, вероятно, поможет в этой задаче.Если у вас есть какие-либо вопросы по пути, задайте еще один вопрос.Не уверен, что кто-то еще захочет дать вам более подробный ответ на этот вопрос.

Ваш проект может быть достаточно большим, чтобы вы захотели работать с классами тоже.

1 голос
/ 04 ноября 2011

Пожалуйста, избегайте каждого Select в вашем коде.

Например,

Range("A1:D1").Select
Selection.AutoFilter

можно заменить на:

Range("A1:D1").AutoFilter
...