Доброго времени суток, ГУРУ VBA. Помогите, пожалуйста с написанием макроса. Кратко опишу задачу: на ПК есть папка, в которой находится порядка 11000 однотипных по своей структуре файлов Excel("Закл.№30918-YMTP3-A-0131"). Отличие между ними, только в именах. Необходимо из каждого файла вытащить определенный лист ("УК"), сохранить его в новой книге без формул(заменить все формулы их значениями), присвоив этому файлу имя из значений в определенных ячейках("L3","M3" и "N3"). Вновь созданный файл должен сохраниться в папке по заранее заданному пути в коде макроса ("C:\УЗК"). Файл "YMTP3-A-0131UT-30917" это результат, который должен получиться.
Доброго времени суток, ГУРУ VBA. Помогите, пожалуйста с написанием макроса. Кратко опишу задачу: на ПК есть папка, в которой находится порядка 11000 однотипных по своей структуре файлов Excel("Закл.№30918-YMTP3-A-0131"). Отличие между ними, только в именах. Необходимо из каждого файла вытащить определенный лист ("УК"), сохранить его в новой книге без формул(заменить все формулы их значениями), присвоив этому файлу имя из значений в определенных ячейках("L3","M3" и "N3"). Вновь созданный файл должен сохраниться в папке по заранее заданному пути в коде макроса ("C:\УЗК"). Файл "YMTP3-A-0131UT-30917" это результат, который должен получиться.Alexey_1979
Set foldr = fso.getfolder(Path0) Set foldr1 = fso.getfolder(Path1)
'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Application.ScreenUpdating = False sFiles = Dir(sFolder & "Зак*.xls*") Do While sFiles <> "" 'открываем книгу Set wb = Application.Workbooks.Open(sFolder & sFiles) 'действия с файлом FileName = Path0 & "\" & wb.Sheets("УК").Cells(3, 12) & "-" & wb.Sheets("УК").Cells(3, 13) _ & "-" & wb.Sheets("УК").Cells(3, 14) & ".xlsx"
'Закрываем книгу с сохранением изменений wb.Close False 'если поставить False - книга будет закрыта без сохранения sFiles = Dir Loop
Call MergingFiles
Application.ScreenUpdating = True
End Sub
Sub MergingFiles() ' Собираем все листы в новую книгу с именем ТП
Application.DisplayAlerts = False
Dim CurFile As String Dim DestWB As Workbook Dim ws As Object 'Рабочие листы могут быть произвольного типа.
Const DirLoc As String = "C:\УЗК\" 'Местоположение исходных файлов. Const DirLoc1 As String = "C:\УЗК_ОБЩ\" 'Местоположение конечного файла.
Application.ScreenUpdating = False
Set DestWB = Workbooks.Add(xlWorksheet) CurFile = Dir(DirLoc & "*.xlsx")
Do While CurFile <> vbNullString
Dim OrigWB As Workbook Set OrigWB = Workbooks.Open(FileName:=DirLoc & CurFile, _ ReadOnly:=True) CurFile = Left(Left(CurFile, Len(CurFile) - 4), 29)
'Получение базового имени 'рабочего листа путем отсечения 'последних 4-х символов имени 'исходного файла (".xlsx").
For Each ws In OrigWB.Sheets ws.Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
If OrigWB.Sheets.Count > 1 Then DestWB.Sheets(DestWB.Sheets.Count).Name = CurFile & ws.Index Else DestWB.Sheets(DestWB.Sheets.Count).Name = CurFile End If
Set foldr = fso.getfolder(Path0) Set foldr1 = fso.getfolder(Path1)
'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Application.ScreenUpdating = False sFiles = Dir(sFolder & "Зак*.xls*") Do While sFiles <> "" 'открываем книгу Set wb = Application.Workbooks.Open(sFolder & sFiles) 'действия с файлом FileName = Path0 & "\" & wb.Sheets("УК").Cells(3, 12) & "-" & wb.Sheets("УК").Cells(3, 13) _ & "-" & wb.Sheets("УК").Cells(3, 14) & ".xlsx"
'Закрываем книгу с сохранением изменений wb.Close False 'если поставить False - книга будет закрыта без сохранения sFiles = Dir Loop
Call MergingFiles
Application.ScreenUpdating = True
End Sub
Sub MergingFiles() ' Собираем все листы в новую книгу с именем ТП
Application.DisplayAlerts = False
Dim CurFile As String Dim DestWB As Workbook Dim ws As Object 'Рабочие листы могут быть произвольного типа.
Const DirLoc As String = "C:\УЗК\" 'Местоположение исходных файлов. Const DirLoc1 As String = "C:\УЗК_ОБЩ\" 'Местоположение конечного файла.
Application.ScreenUpdating = False
Set DestWB = Workbooks.Add(xlWorksheet) CurFile = Dir(DirLoc & "*.xlsx")
Do While CurFile <> vbNullString
Dim OrigWB As Workbook Set OrigWB = Workbooks.Open(FileName:=DirLoc & CurFile, _ ReadOnly:=True) CurFile = Left(Left(CurFile, Len(CurFile) - 4), 29)
'Получение базового имени 'рабочего листа путем отсечения 'последних 4-х символов имени 'исходного файла (".xlsx").
For Each ws In OrigWB.Sheets ws.Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
If OrigWB.Sheets.Count > 1 Then DestWB.Sheets(DestWB.Sheets.Count).Name = CurFile & ws.Index Else DestWB.Sheets(DestWB.Sheets.Count).Name = CurFile End If