Страница 1 из 1

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

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

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

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

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

Добавлено: 08 апр 2014 21:11
Ixenon
В вашем макросе все работает, как написано. Цикл проходит по всем строкам от четвертой, до самой последней непустой 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

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

Добавлено: 09 апр 2014 09:09
eugen
Всё вроде так и понимаю, но не работает почему-то... Может быть из-за того, что у меня в настройках программы есть неактивные листы? Он просто не хочет работать этот макрос. Обычно запускаю файл с макросом, он сначала пишет строчку, что работает макрос, а потом уже строчки считывает. А в этом случае экран со статусом несколько раз мигает и сразу переходит на обработку прайса.

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

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