Страницы: 1
RSS
Автоматизированное заполнение ячеек в типовой межотраслевой форме №3 от 28.11.97г из готового шаблона с данными, На ежедневной основе сталкиваюсь с проблемой массированного заполнения данных которой по идее не должно быть
 
Добрый день коллеги, не сказать что я глуп ,но катастрофически устал на работе заполнять шаблоны документов одними и теми же данными из-за чего начинаются ошибки приводящие к застою закрывающих документов и соответственно оплат, основная суть в том что в межотраслевой форме № 3 как и указал в шапке темы есть поля с водителями, техникой, адресами, типом техники, типами работ и датами которые необходимо заполнять не единоразово а по 500-700 шаблонов, конечно рука набита и за пару дней это успевается но есть мысль что это все можно делать умнее и современнее возможно с помощью каких то программ или макросов но самостоятельный поиск не привел к полезному результату, если вдруг у кого то есть удобная подсказка или готовое решение и кто то вдруг сталкивался с подобным буду рад помощи. пример этой формы прикрепил в файлы, может это поможет не только мне, но и другим искателям решения
 
Должен быть какой-то файл-источник.
 
он есть, там куча данных и адресов
 
Смешно :D  
 
DanilaArakum, добрый день. Для старта: https://www.planetaexcel.ru/techniques/7/93/
 
попробую адаптировать под задачу, спасибо, может есть еще есть какие то варианты?
Цитата
написал:
 https://www.planetaexcel.ru/techniques/7/93/
 
Код
Option Explicit
Private Const OPTION_STRING = "1 стр1 BZ6; 2 стр1 M17; 3 стр1 W15; 4 стр2 EQ9"
Private wbTemp As Workbook

Sub Заполнить_шаблон()
    Set wbTemp = Workbooks("шаблон.xls")
    
    CloseEmptyWb
    
    Dim rSource As Range
    On Error Resume Next
    Set rSource = Selection.EntireRow
    Set rSource = Intersect(rSource, rSource.Parent.UsedRange)
    On Error GoTo 0
    If rSource Is Nothing Then Exit Sub
    
    Dim rowSource As Range
    For Each rowSource In rSource.Rows
        If Not rowSource.Hidden Then
            FillOneFile rowSource
        End If
    Next
End Sub

Private Sub FillOneFile(rowSource As Range)
    wbTemp.Sheets.Copy
    Dim wbTarg As Workbook
    Set wbTarg = ActiveWorkbook
    
    Dim vOption As Variant, rSource As Range, rTarget As Range, wasChanged As Boolean
    For Each vOption In Split(OPTION_STRING, ";")
        vOption = Trim(vOption)
        vOption = Split(vOption, " ")
        On Error Resume Next
        Set rSource = rowSource.Cells(1, CLng(vOption(0)))
        Set rTarget = wbTarg.Sheets(vOption(1)).Range(vOption(2))
        On Error GoTo 0
        If Not rSource Is Nothing Then
            If Not rTarget Is Nothing Then
                rTarget.Value = rSource.Value
                wasChanged = True
            End If
        End If
        Set rSource = Nothing
        Set rTarget = Nothing
    Next
    If wasChanged Then
        SaveTargetWorkbook wbTarg
    Else
        wbTarg.Close False
    End If
End Sub

Private Sub SaveTargetWorkbook(wbTarg As Workbook)

    Dim sName As String
    sName = wbTarg.Sheets(1).Range("BZ6").Value
    sName = sName & "." & CreateObject("Scripting.FileSystemObject").GetTempName
    ReplaceSymbols sName
    sName = sName & ".xlsx"
    
    Dim sFull As String
    sFull = ThisWorkbook.Path & "\" & sName
    On Error Resume Next
    Workbooks(sName).Close False
    Kill sFull
    Err.Clear
    wbTarg.SaveAs Filename:=sFull, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Debug.Print sFull
    If Err = 0 Then wbTarg.Close False
    On Error GoTo 0

End Sub

Sub ReplaceSymbols(ss As String)
    Dim vv As Variant
    For Each vv In Array("\", "/", ":", "*", "?", """", "<", ">", "|", "[", "]") '[] недопустимые только в имени листа
        ss = Replace(ss, vv, " ")
    Next
    ss = Trim(ss) 'Пробел в конце строки не распознаётся файловой системой.
End Sub


Private Sub CloseEmptyWb()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Path = "" Then wb.Close False
    Next
End Sub
Допустим в файле-источнике в первом столбце приведён номер, во втором - ФИО водителя, в третьем - марка автомобиля, в четвёртом - название заказчика. Эти данные можно менять, дополнять в строке OPTION_STRING = "1 стр1 BZ6; 2 стр1 M17; 3 стр1 W15; 4 стр2 EQ9".
- Открываете файл "шаблон.xls".
- Выделяете в файле-источнике нужные строки.
- Запускаете макрос Заполнить_шаблон.
В папке рядом с файлом макроса будут сформированы файлы из шаблона.
 
МатросНаЗебре, низкий поклон, попробую это реализовать звучит как решение многолетней боли
 
вариант ручной (только принцип)
в форму переносятся данные с доп листа, в который они скорее всего подтягиваются из источника, в котором ведется общий учет
познакомился с Excel
Страницы: 1
Читают тему
Наверх