Добрый день! Добрые люди с форума помогли написать макрос который выполняет следующие функции В открытом файле он находит название столбцов которые указаны в первой строке по перечню, копирует эти столбцы, создает новый файл вставляет туда скопированные столбцы и сохраняет новый файл в определенную папку. Теперь я придумал алгоритм который поможет еще более упростить задачу, но мне нужна помощь в его реализации. Алгоритм: В коде прописывается путь к папке или к названию файла Путь выглядит так к папке - \\server6.tns\dzo\\56\2018\56
Код имеет такой вид:
Код
Sub Test()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Dim Dest As Workbook
Dim Source As Range
Dim ConstFilePath As String
Dim ConstFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim n As String
A = WorksheetFunction.Match("TypeDoma", [ФЛ_Ф_056!a1:ww1], 0)
B = WorksheetFunction.Match("TypUL", [ФЛ_Ф_056!a1:ww1], 0)
C = WorksheetFunction.Match("LS", [ФЛ_Ф_056!a1:ww1], 0)
J = WorksheetFunction.Match("VOL_IND", [ФЛ_Ф_056!a1:ww1], 0)
D = WorksheetFunction.Match("N_SERV", [ФЛ_Ф_056!a1:ww1], 0)
E = WorksheetFunction.Match("SQUARE", [ФЛ_Ф_056!a1:ww1], 0)
F = WorksheetFunction.Match("ROOMS", [ФЛ_Ф_056!a1:ww1], 0)
G = WorksheetFunction.Match("MAN_COUNT", [ФЛ_Ф_056!a1:ww1], 0)
H = WorksheetFunction.Match("STATUS", [ФЛ_Ф_056!a1:ww1], 0)
Set Source = Nothing
On Error Resume Next
Set Source = Union(Columns(A), Columns(B), Columns(C), Columns(J), Columns(D), Columns(E), Columns(F), Columns(G), Columns(H))
On Error GoTo 0
If Source Is Nothing Then
MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly
Exit Sub
End If
Set Dest = Workbooks.Add(xlWBATWorksheet)
Source.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
End With
With Dest
.SaveAs ConstFilePath & ConstFileName & FileExtStr
On Error Resume Next
End With
Dest.Close savechanges:=True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
Как вариант: Переписать Вашу sub, чтобы она принимала на вход полное имя файла. Взять sub, который я отрефакторил у Дмитрий(The_Prist) Щербаков и после строки
Код
For Each sFile In coll
вставить вызов своей процедуры с параметром sFile
Скрытый текст
Код
Public Sub Файлы_Каталога(ByVal Folder As String, _
ByVal sMask As String, ByVal Глубина_Вложенных_Каталогов As Long)
Dim coll As Collection
Folder = ThisWorkbook.Path
If Dir(Folder, vbDirectory) = vbNullString Then
Err.Raise 567, "Файлы_Каталога", "Не найдена папка «" & Folder & "»"
Exit Sub ' выход, если папка не найдена
End If
Set coll = FilenamesCollection(Folder, sMask, _
Глубина_Вложенных_Каталогов) ' получаем список файлов XLS из папки
If coll.Count = 0 Then
Err.Raise 567, "Файлы_Каталога", "В папке «" & Split(Folder, "\")(UBound(Split(Folder, "\")) - 1) & "» нет ни одного подходящего файла!"
Exit Sub ' выход, если нет файлов
End If
' перебираем все найденные файлы
Dim sFile As Variant
For Each sFile In coll
' Ваша процедура с параметром sFile
Next
End Sub