Макрос для обработки прайс-листа с перебором листов

В этом разделе можно размещать ваши прайс-листы для получения помощи в настройке прайвил импорта, ячеек, определения категорий товара и т.д.
Ответить
eugen
Сообщения: 58
Зарегистрирован: 25 янв 2013 21:10

07 апр 2014 17:22

Добрый день. Пытаюсь настроить макрос для прайс-листа. Есть прайс, в котором множество листов и для каждого листа нужно по формуле умножить колонку на колонку. Вроде все делаю по науке, но он чего-то не работает. Прошу помощи у сообщества;)

Код: Выделить всё

Option Explicit

Public Sub MainVBA()
   ' (С) 2011 ElbuzGroup, for E-Trade PriceList Importer
    Dim lngSheetID      As Long ' номер листа с которым работать
    Dim lngRowSourceCur As Long
   Dim lngRowsCount As Long
    Dim varNewFileName As Variant
    Dim fs As Variant
    Dim i As Long, x As Long
Dim Категория As String
Dim Производитель As String
   
   Application.ScreenUpdating = False
   
    ' Корректируем
   For lngSheetID=5 TO WorkSheets.Count
      Worksheets(lngSheetID).Activate

Cells.ColumnWidth = 12
Cells.WrapText = False

For i = 4 To ActiveSheet.UsedRange.Rows.Count
If Cells(i, 5) <> 0 Then
Cells(i, 11) = Cells(i, 5) + Cells(i, 8)
End If
Next i

    Next lngSheetID
   Worksheets(1).Activate
   
   ' Сохраняем данные в новом файле из буфера обмена
    Set fs = CreateObject("Scripting.FileSystemObject")
    varNewFileName = Replace(ActiveWorkbook.FullName, ActiveWorkbook.Name, "") & "_" & ActiveWorkbook.Name
    If fs.FileExists(varNewFileName) = True Then
        Kill varNewFileName
    End If
   
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
   
   Dim nSourceFile As Long
   Dim nDestFile As Long
   Dim nTotalSheets As Long
   Dim nSheetsAdd As Long

   nSourceFile = Workbooks.Count
   nTotalSheets=Workbooks.Item(nSourceFile).WorkSheets.Count
   Workbooks.Add
   nDestFile = Workbooks.Count

   If nTotalSheets>3 Then
      For nSheetsAdd=1 TO nTotalSheets-3
         Workbooks.Item(nDestFile).Sheets.Add
      Next nSheetsAdd
   End If
   
   For lngSheetID=1 TO nTotalSheets
      Workbooks.Item(nSourceFile).Sheets.Item(lngSheetID).Activate ' активируем лист источник
      Workbooks.Item(nSourceFile).Sheets.Item(lngSheetID).UsedRange.Copy
      Workbooks.Item(nDestFile).Sheets.Item(lngSheetID).Activate ' активируем новый лист
      Workbooks.Item(nDestFile).Sheets.Item(lngSheetID).Paste
      Workbooks.Item(nDestFile).Sheets.Item(lngSheetID).Name=Workbooks.Item(nSourceFile).Sheets.Item(lngSheetID).Name
   Next lngSheetID
   Workbooks.Item(nDestFile).Sheets.Item(1).Activate
   Workbooks.Item(nSourceFile).Sheets.Item(1).Activate

   Application.ScreenUpdating = True
   
    Workbooks.Item(nDestFile).SaveAs varNewFileName, Workbooks.Item(nSourceFile).FileFormat, , , False, False, 1, 2
    Workbooks.Item(nDestFile).Close
    'Application.Quit
End Sub
Вложения
Копия Прайс_БН_Опт_РУБ_27_3-1.rar
(454.96 КБ) 176 скачиваний
Ixenon
Сообщения: 743
Зарегистрирован: 19 ноя 2011 09:03

08 апр 2014 21:11

В вашем макросе все работает, как написано. Цикл проходит по всем строкам от четвертой, до самой последней непустой For i = 4 To ActiveSheet.UsedRange.Rows.Count
Для каждой новой строки происходит следующее:
если значение в пятом столбце не равно нулю Cells(i, 5) <> 0 то складываем значение из пятого столбца со значением из восьмого столбца и записываем результат в одинадцатый столбец Cells(i, 11) = Cells(i, 5) + Cells(i, 8)

Данный расчет производится начиная с пятого и заканчивая последним листом данной книги For lngSheetID=5 TO WorkSheets.Count
Если хотите чтобы расчет происходил на всех листах измените 5 на 1, т.е. было For lngSheetID=5 TO WorkSheets.Count, стало For lngSheetID=1 TO WorkSheets.Count
eugen
Сообщения: 58
Зарегистрирован: 25 янв 2013 21:10

09 апр 2014 09:09

Всё вроде так и понимаю, но не работает почему-то... Может быть из-за того, что у меня в настройках программы есть неактивные листы? Он просто не хочет работать этот макрос. Обычно запускаю файл с макросом, он сначала пишет строчку, что работает макрос, а потом уже строчки считывает. А в этом случае экран со статусом несколько раз мигает и сразу переходит на обработку прайса.
Ixenon
Сообщения: 743
Зарегистрирован: 19 ноя 2011 09:03

09 апр 2014 09:30

В новой базе я добавил ваш прайс лист(назвал его "1.xls"), ничего не настраивал, зашел сразу в настройках прайс-листа в дополнительно->настройка макросов VBA прописал путь к вашему макросу и нажал кнопку проверить макрос на прайс листе.
В результате создался новый файл "_1.xls" я его заархивировал и прикрепил к этому сообщению.
В файле видно, что начиная с пятого листа, в столбце "J" появилась сумма значений из столбцов "D" и "G"
Что у вас не работает не понятно.
Обычно после указания макроса все нажимают кнопку "проверить макрос на прайс листе", после этого программа либо ошибку выдаст, либо откроет файл Excel с результатом выполнения макроса и уже на основании этого файла производятся все настройки импорта прайс-листа.
Вложения
_1.zip
(660.08 КБ) 197 скачиваний
Ответить

Вернуться в «Примеры прайсов, помощь в настройке»