Страницы: 1
RSS
Сбор данных из нескольких файлов в папке в отдельный файл макросом
 
Добрый день. Имеются файлы в папке, как макросом скопировать из всех файлов с листа "Исх" интервал "B2:E10" и вставить в файл, из которого запускаем макрос на лист1. Помогите пожалуйста.
 
natalia875, например так:
Код
Sub Копирование()
Dim fDialog As FileDialog, i As Object, wb As Workbook, Lastrow As Long
Dim objFolder As Object, FS As Object
Application.ScreenUpdating = False
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
Set FS = CreateObject("Scripting.FileSystemObject")
With fDialog
    .AllowMultiSelect = True
    .Show
    Set objFolder = FS.getfolder(.SelectedItems(1))
        For Each i In objFolder.Files
            Set wb = Application.Workbooks.Open(i)
            Lastrow = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
            Sheets("Исх").Range("B2:E10").Copy ThisWorkbook.Sheets(1).Cells(Lastrow + 1, 1)
            wb.Close False
        Next i
End With
Application.ScreenUpdating = True

End Sub
 
Большое Вам спасибо, все работает.  :)  
 
А как исправить, чтобы вставлял значения, а не формулы?
 
посмотрите зеленый комментарий
Код
Sub Копирование()
Dim fDialog As FileDialog, i As Object, wb As Workbook, Lastrow As Long
Dim objFolder As Object, FS As Object
Application.ScreenUpdating = False
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
Set FS = CreateObject("Scripting.FileSystemObject")
With fDialog
    .AllowMultiSelect = True
    .Show
    Set objFolder = FS.getfolder(.SelectedItems(1))
        For Each i In objFolder.Files
            Set wb = Application.Workbooks.Open(i)
            Lastrow = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
            Sheets("Исх").Range("B2:E10").Copy
            ThisWorkbook.Sheets(1).Cells(Lastrow, 1).PasteSpecial xlValues ' вставить только значения
            wb.Close False
        Next i
End With
Application.ScreenUpdating = True
End Sub
Изменено: artemkau88 - 17.01.2022 09:32:39
 
СПАСИБО!
 
А как вставить не на Лист1, а на Лист4, например?
 
Цитата
написал:
ThisWorkbook.Sheets(1).Cells(Lastrow, 1).PasteSpecial xlValues ' вставить только значения
Вставить (4) в Sheets(1)
 
Пробовала, не получается вставить на лист4.
 
natalia875, набросал Вам 2 варианта, проверьте
Остальное написал Вам в ответ на Ваше сообщение в личке

с выбором листа без формы:
Код
Sub Копирование_с_выбором_листа()
Dim fDialog As FileDialog, i As Object, wb As Workbook, Lastrow As Long
Dim objFolder As Object, FS As Object, shtName As String, button, sht As Worksheet
Application.ScreenUpdating = False
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
Set FS = CreateObject("Scripting.FileSystemObject")
With fDialog
    .AllowMultiSelect = True
    .Show
    Set objFolder = FS.getfolder(.SelectedItems(1))
    shtName = Application.InputBox("Введите имя листа, на который хотите скопировать информацию", Type:=2)
    If Not ifSheetExists(shtName) Then
        button = MsgBox("Листа с именем " & shtName & " не существует, создать?", vbYesNo)
        If button = vbYes Then
            Set sht = ThisWorkbook.Worksheets.Add
            sht.name = shtName
        Else
            MsgBox "Запустите макрос заново!!": Exit Sub
        End If
    End If
        
        For Each i In objFolder.Files
            Set wb = Application.Workbooks.Open(i)
            Lastrow = ThisWorkbook.Sheets(shtName).Cells(Rows.Count, 1).End(xlUp).Row ' здесь sheets("Лист1") - целевой лист куда вставлять значения, Лист1 - имя листа
            Sheets("Исх").Range("B2:E10").Copy
            ThisWorkbook.Sheets(shtName).Cells(Lastrow, 1).PasteSpecial xlValues ' вставить только значения, здесь sheets("Лист1") - целевой лист куда вставлять значения, Лист1 - имя листа
            wb.Close False
        Next i
End With
Application.ScreenUpdating = True
End Sub

Private Function ifSheetExists(name As String)
    Dim sht As Worksheet
    
    For Each sht In ThisWorkbook.Worksheets
        If sht.name = name Then
            ifSheetExists = True: Exit Function
        Else
            ifSheetExists = False
        End If
    Next sht
End Function
Изменено: artemkau88 - 14.03.2022 20:41:47
 
Цитата
PITBY написал:
Вставить (4) в Sheets(1)
Есть понятие имя листа и есть понятие индекс листа. Думаю с именем листа всё понятно, а вот индекс - это номер по-порядку, начиная слева
Поэтому у ТС и не получается. ТС просит, чтобы данные вставлялись на лист с именем "Лист4", а вы ему подсказываете индекс листа 4. А у ТС может вообще 4-го листа в файле нет, либо этот 4-й лист имеет совсем другое название.
Sheets(4) - здесь 4 - это индекс листа (т.е. порядковый номер листа, начиная слева)
Sheets("Лист4") - Лист4 - это уникальное имя листа, который может быть первым, пятым, десятым по порядку (не важно каким по-порядку слева)
Изменено: New - 14.03.2022 21:45:58
Страницы: 1
Наверх