Страницы: 1
RSS
Обработка списка файлов, скопировать данные из множества таблиц после чего проверить внешние файлы PDF на совпадение данных
 
Архив с исходниками прикрепил по внешний ссылке. Размер 2 Мб https://drive.google.com/file/d/1_vVKhcYIvnkKYgNM5LdOUkCD5_TzHbdT/view?usp=sharing

Подскажите, что делаю не так. И насколько это реально сделать через VBA? Или нужен Python?

Необходимо автоматизировать копирование данных из множества файлов в одной папке в единый файл.

1.       В папке Upload\In лежат исходные файлы Excel. Их может быть 3, может быть 100. В каждом файле может быть 3 записи, а может быть 1000 записей.

2.       Файл upload.xlsm содержит скрипт, который открывает по очереди каждый Excel из пункта 1 и копирует оттуда данные из поля СНИЛС: столбец E начиная с 20 строки. Цифры СНИЛСа могут быть записаны в формате ХХХ-ХХХ-ХХХ-ХХ или ХХХ-ХХХ-ХХХ ХХ

3.       После этого этот файл upload.xlsm сохраняется со списком скопированных СНИЛС и обрабатывается внешней программой. На выходе получаем множество документов PDF сохранённых в папку Upload\Out

4.       Каждый документ PDF в названии содержит ФИО заявителя в виде «Заявление_ФАМИЛИЯ_ИМЯ_ОТЧЕТВО_ГГГГ_ММ_ДД.pdf».

5.       После этого запустить скрипт в файле checklist.xlsm который найдёт совпадения ФИО в файлах PDF и в исходных таблицах Upload\In выделит эти строки цветом.

6.       Если строка не выделена цветом и нет файла PDF эту запись оператор проверить вручную

Структура папок:

C:\Upload

C:\Upload\In – содержит исходные файлы Excel с данными

C:\Upload\Out – содержит список сгенерированных файлов pdf

C:\Upload\upload.xlsm – файл в который надо собрать цифры из множества файлов в папке C:\Upload\checklist.xlsm – файл который проверить совпадения ФИО в PDF файлах и исходных таблицах.

Код в файле upload.xlsm. Что-то делаю не так, скрипт запускается, но не копирует данные

Код
Sub КопироватьСНИЛС()    On Error GoTo ErrorHandler        Dim sourceFolderPath As String    Dim destinationFilePath As String    Dim sourceFileName As String    Dim destinationWorkbook As Workbook    Dim sourceWorkbook As Workbook    Dim destinationWorksheet As Worksheet    Dim sourceWorksheet As Worksheet    Dim lastRow As Long    Dim i As Long        ' путь к папке "In" и путь к файлу "upload.xlsm"    sourceFolderPath = "C:\Upload\In\"    destinationFilePath = "C:\Upload\upload.xlsm"        ' Проверка существования файлов    If Dir(destinationFilePath) = "" Then        MsgBox "Файл 'upload.xlsm' не найден.", vbExclamation        Exit Sub    End If        ' Открываем файл "upload.xlsm"    Set destinationWorkbook = Workbooks.Open(destinationFilePath)    Set destinationWorksheet = destinationWorkbook.Sheets(1)        ' Проходим по всем файлам в папке "In"    sourceFileName = Dir(sourceFolderPath & "*.xlsx")    Do While sourceFileName <> ""        ' Открываем текущий файл        On Error Resume Next        Set sourceWorkbook = Workbooks.Open(sourceFolderPath & sourceFileName)        On Error GoTo ErrorHandler                If Not sourceWorkbook Is Nothing Then            Set sourceWorksheet = sourceWorkbook.Sheets(1)                        ' Находим последнюю заполненную строку в столбце E            lastRow = sourceWorksheet.Cells(sourceWorksheet.Rows.Count, "E").End(xlUp).Row                        ' Копируем СНИЛС из столбца E в столбец B файла "upload.xlsm"            For i = 20 To lastRow                destinationWorksheet.Cells(i - 18, 2).Value = sourceWorksheet.Cells(i, 5).Value            Next i                        ' Закрываем текущий файл            sourceWorkbook.Close SaveChanges:=False        End If                ' Переходим к следующему файлу в папке "In"        sourceFileName = Dir    Loop        ' Закрываем файл "upload.xlsm" с сохранением изменений    destinationWorkbook.Close SaveChanges:=True        ' Очищаем объекты    Set destinationWorksheet = Nothing    Set destinationWorkbook = Nothing    Set sourceWorksheet = Nothing    Set sourceWorkbook = Nothing        Exit Sub    ErrorHandler:    MsgBox "Произошла ошибка: " & Err.Description, vbExclamation    ' Обработка ошибки (закрытие файлов и т.д.) может быть добавлена здесь        ' Очищаем объекты    Set destinationWorksheet = Nothing    Set destinationWorkbook = Nothing    Set sourceWorksheet = Nothing    Set sourceWorkbook = NothingEnd Sub





Изменено: excelmail - 02.02.2024 09:05:33
 
код-однострочник, такое лучше на python ))
 
Возможные причины ошибки
Нет файлов в папке "C:\Upload\In\" с расширением xlsx.
В файлах источниках на первом листе в столбце E нет данных ниже строки 20.
 
Цитата
написал:
код-однострочник, такое лучше на python ))
код так вставился

он такой



Sub КопироватьСНИЛС()
   On Error GoTo ErrorHandler
   
   Dim sourceFolderPath As String
   Dim destinationFilePath As String
   Dim sourceFileName As String
   Dim destinationWorkbook As Workbook
   Dim sourceWorkbook As Workbook
   Dim destinationWorksheet As Worksheet
   Dim sourceWorksheet As Worksheet
   Dim lastRow As Long
   Dim i As Long
   
   ' путь к папке "In" и путь к файлу "upload.xlsm"
   sourceFolderPath = "C:\Upload\In\"
   destinationFilePath = "C:\Upload\upload.xlsm"
   
   ' Проверка существования файлов
   If Dir(destinationFilePath) = "" Then
       MsgBox "Файл 'upload.xlsm' не найден.", vbExclamation
       Exit Sub
   End If
   
   ' Открываем файл "upload.xlsm"
   Set destinationWorkbook = Workbooks.Open(destinationFilePath)
   Set destinationWorksheet = destinationWorkbook.Sheets(1)
   
   ' Проходим по всем файлам в папке "In"
   sourceFileName = Dir(sourceFolderPath & "*.xlsx")
   Do While sourceFileName <> ""
       ' Открываем текущий файл
       On Error Resume Next
       Set sourceWorkbook = Workbooks.Open(sourceFolderPath & sourceFileName)
       On Error GoTo ErrorHandler
       
       If Not sourceWorkbook Is Nothing Then
           Set sourceWorksheet = sourceWorkbook.Sheets(1)
           
           ' Находим последнюю заполненную строку в столбце E
           lastRow = sourceWorksheet.Cells(sourceWorksheet.Rows.Count, "E").End(xlUp).Row
           
           ' Копируем СНИЛС из столбца E в столбец B файла "upload.xlsm"
           For i = 20 To lastRow
               destinationWorksheet.Cells(i - 18, 2).Value = sourceWorksheet.Cells(i, 5).Value
           Next i
           
           ' Закрываем текущий файл
           sourceWorkbook.Close SaveChanges:=False
       End If
       
       ' Переходим к следующему файлу в папке "In"
       sourceFileName = Dir
   Loop
   
   ' Закрываем файл "upload.xlsm" с сохранением изменений
   destinationWorkbook.Close SaveChanges:=True
   
   ' Очищаем объекты
   Set destinationWorksheet = Nothing
   Set destinationWorkbook = Nothing
   Set sourceWorksheet = Nothing
   Set sourceWorkbook = Nothing
   
   Exit Sub
   
ErrorHandler:
   MsgBox "Произошла ошибка: " & Err.Description, vbExclamation
   ' Обработка ошибки (закрытие файлов и т.д.) может быть добавлена здесь
   
   ' Очищаем объекты
   Set destinationWorksheet = Nothing
   Set destinationWorkbook = Nothing
   Set sourceWorksheet = Nothing
   Set sourceWorkbook = Nothing
End Sub
 
Цитата
написал:
Нет файлов в папке "C:\Upload\In\" с расширением xlsx.В файлах источниках на первом листе в столбце E нет данных ниже строки 20.
файлы есть
данные есть

в архиве все оригиналы приложил
 
Скрытых листов нет?
Может оказаться, что видимый первый лист первым не является.
 
Первая часть задачи решена

Имеем файл upload.xlsm в который собираем данные из нескольких таблиц и вставляем в столбец В начиная со строки 2

В нашем случае из каждого файла копируется поле СНИЛС (начиная со строки 20 в столбце Е в каждом файле)

После этого в файле upload проверяем соответствие СНИЛС шаблону ХХХ-ХХХ-ХХХ ХХ, если не соответствует или пустое поле ячейка будет залита розовым цветом

Рабочий каталог должен быть на диске C:\Upload
Изменено: excelmail - 13.02.2024 12:42:05
Страницы: 1
Наверх