Всем привет! Помогите пожалуйста создать макрос для генерирования csv файла из накладной xls. Накладная выгружается из 1с с разными именами, с разным количеством и ассортиментом товара, для csv нужно только определённые данные. В итоге хочется получить такой инструмент: 1. Файлы с накладными xls лежат в определенной папке 2. Открываю файл xls, запускаю макрос 3. В подпапке с накладными создается файл csv с нужными данными. 4. Открываю следующий файл xls и тд.
Назовите следующий файл как предыдущий - сработает. Ну или добавьте в код перебор файлов - примеры на форумах есть (на всех, там где Вы мне на аналогичную помощь не ответили - тоже можно найти).
Слэн, Большое спасибо. Работает следующим образом: Открываю файл с накладной xls, тут же появляется ещё один файл xls с нужной информацией для csv, сам в csv не сохраняет, можно добавить такой функционал?
Слэн, Добрый день! Получилось сделать, чтобы сохранял в эту же папку где лежит xls, но при сохранение csv данные записываются через запятую, когда это делаешь в ручную (сохранить как выбираю CSV (Comma delimited) (*. csv) , данные пишутся в отдельные ячейки по строкам. изменил строчку
Hugo, Спасибо, работает. Ещё вопрос если можно, как сделать чтобы в подпапку с именем csv, сохранялись файлы csv? Заметил, что если код товара содержит в конце "х", в csv он попадает без "х".
Доброго времени суток! Прошу помочь оптимизировать макрос, который перебирает все файлы в папке, делает из них csv и добавляет их в письмо как вложение, перемещает исходный файл в другую папку, предварительно подготовив на печать на одной странице. В принципе все работает только как то не быстро.
Скрытый текст
Код
Sub csv()
Dim sFolder As String, sFiles As String
Dim OutMail As Object
Dim OutApp As Object
Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.application")
OutApp.session.logon
Set OutMail = OutApp.createitem(0)
With OutMail
.To = "1@1.biz"
.Subject = "Отгрузка"
.display
End With
sFolder = ActiveWorkbook.Path
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Application.ScreenUpdating = False
sFiles = Dir(sFolder & "*.xls*")
Do While sFiles <> ""
Workbooks.Open sFolder & sFiles
Dim r, ar, wb
Dim wbfilename As String, wbnewfilename As String, csv As String
Dim objFSO As Object, objFile As Object
Set wb = ActiveWorkbook
Set r = ActiveSheet.Cells(Rows.Count, 2).End(xlUp)
ar = Range(r.End(xlUp).Offset(1, 1), r.Offset(, 10))
wbfilename = wb.FullName
wbnewfilename = Replace(wbfilename, wb.Name, "beckup\" & wb.Name)
Application.ScreenUpdating = False
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.getfile(wbfilename)
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.236220472440945)
.RightMargin = Application.InchesToPoints(0.236220472440945)
.TopMargin = Application.InchesToPoints(0.196850393700787)
.BottomMargin = Application.InchesToPoints(0.196850393700787)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False
.PrintGridlines = False
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
End With
Application.PrintCommunication = True
wb.save
Application.ScreenUpdating = False
With Workbooks.Add
With .ActiveSheet
.Cells(1).Resize(UBound(ar), UBound(ar, 2)) = ar
.Columns(UBound(ar, 2) - 1).Delete
For r = UBound(ar, 2) - 2 To 2 Step -1
If IsEmpty(ar(1, r)) Then .Columns(r).Delete
Next r
End With
'Stop
.SaveAs Replace(Replace(wb.FullName, wb.Name, "csv\" & wb.Name), "xls", "csv"), xlCSV, local:=True
csv = ActiveWorkbook.FullName
End With
OutMail.attachments.Add csv
wb.Close
objFile.Copy wbnewfilename
objFile.Delete
ActiveWorkbook.Close False
sFiles = Dir
Loop
Application.ScreenUpdating = True
'Stop
With Application
.DisplayAlerts = False
.Quit
End With
End Sub