Доброе время! Помогите, пожалуйста, в решении такой задачи. Файл (Obrazec.xls), содержит только заголовки полей (Лист1). Полей может быть от 25 до 30. В той же папке лежат файлы, в которых часть полей из файла Obrazec.xls может отсутствовать (исходные данные - на листах Old). Количество файлов может быть от 60 до 100, в примере - это File_1, File_2,File_3 и File_4. Как в эти файлы вставить отсутстующие поля из файла Obrazec, чтобы получить результат, приведенный в файлах на листах New? Такое преобразование файлов нужно перед сборкой данных в один файл.
Доброе время! Помогите, пожалуйста, в решении такой задачи. Файл (Obrazec.xls), содержит только заголовки полей (Лист1). Полей может быть от 25 до 30. В той же папке лежат файлы, в которых часть полей из файла Obrazec.xls может отсутствовать (исходные данные - на листах Old). Количество файлов может быть от 60 до 100, в примере - это File_1, File_2,File_3 и File_4. Как в эти файлы вставить отсутстующие поля из файла Obrazec, чтобы получить результат, приведенный в файлах на листах New? Такое преобразование файлов нужно перед сборкой данных в один файл.Isa
leskris, Названия полей записаны в файле Obrazec и идут именно в таком порядке. И в файлах данных нет полей, которых не было бы в Obrazec. И поля в файлах упорядочены. Т.е., например Поле 2 всегда левее, например, Поля 6.
leskris, Названия полей записаны в файле Obrazec и идут именно в таком порядке. И в файлах данных нет полей, которых не было бы в Obrazec. И поля в файлах упорядочены. Т.е., например Поле 2 всегда левее, например, Поля 6.Isa
Sub addColumns() Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файлы" .InitialFileName = ThisWorkbook.Path .Filters.Clear .Filters.Add "Excel", "*.xls;*.xlsx;*.xlsm", 1: .AllowMultiSelect = True If .Show = False Then Exit Sub Set mainSh = ThisWorkbook.Sheets(1) For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(.SelectedItems(i)) With wb.Sheets(1) j = 1 Do While mainSh.Cells(1, j) <> "" If .Cells(1, j) <> mainSh.Cells(1, j) Then Columns(j).Insert xlToRight .Cells(1, j) = mainSh.Cells(1, j) End If j = j + 1 Loop End With wb.Close True Next i End With End Sub
[/vba]
Isa, посмотрите такой вариант: [vba]
Код
Sub addColumns() Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файлы" .InitialFileName = ThisWorkbook.Path .Filters.Clear .Filters.Add "Excel", "*.xls;*.xlsx;*.xlsm", 1: .AllowMultiSelect = True If .Show = False Then Exit Sub Set mainSh = ThisWorkbook.Sheets(1) For i = 1 To .SelectedItems.Count Set wb = Workbooks.Open(.SelectedItems(i)) With wb.Sheets(1) j = 1 Do While mainSh.Cells(1, j) <> "" If .Cells(1, j) <> mainSh.Cells(1, j) Then Columns(j).Insert xlToRight .Cells(1, j) = mainSh.Cells(1, j) End If j = j + 1 Loop End With wb.Close True Next i End With End Sub