Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2015, 22:41   #11
Сергей Цахло
Пользователь
 
Регистрация: 04.09.2015
Сообщений: 10
По умолчанию

а как это в макрос записать? чтоб он находил на листе шаблона {фио} и заменял его ? потом сохранинял в новом файле.
Сергей Цахло вне форума Ответить с цитированием
Старый 07.09.2015, 22:45   #12
Сергей Цахло
Пользователь
 
Регистрация: 04.09.2015
Сообщений: 10
По умолчанию

вот что у меня получилось:
Код:
Const ИмяФайлаШаблона = "Шаблон.xlsx"
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = ".xlsx"

Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: A = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
    
    Dim wsS As Ranges, wsb As Object, wsWS As Object: Set wsb = Workbooks.Open(ПутьШаблона)
    'Set wsS = Worksheets("База")
    
    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(1)) & " " & Trim$(.Cells(2)) & " " & Trim$(.Cells(3))
            Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов

            pi.StartNewAction p, p + A / 3, "Создание нового файла на основании шаблона", ФИО
            Set wsWS = wsb.Worksheets("Лист1").Select: DoEvents
            
            pi.StartNewAction p + A / 3, p + A * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))

                pi.line3 = "Заменяется поле " & FindText
                With wsWS.Range.Find
                                                         
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
                DoEvents
            Next i
            pi.StartNewAction p + A * 2 / 3, p + A, "Сохранение файла ...", ФИО, " "
            wsWS.SaveAs Filename: wsWS.Close False: DoEvents
            p = p + A
        End With
    Next row

    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub










Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
    MkDir NewFolderName
End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
Открывает шаблон ищет, но не может заменить - шибка, немогу розобраться как макросу указать чтоб он менял найденое (ошибка на выделенное красным)
Сергей Цахло вне форума Ответить с цитированием
Старый 07.09.2015, 23:55   #13
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
(ошибка на выделенное красным)
Ничего удивительного в этом нет.
Вы Ворд с Excel попутали.
Set wsWS = wsb.Worksheets("Лист1").Select
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 08.09.2015, 00:14   #14
Сергей Цахло
Пользователь
 
Регистрация: 04.09.2015
Сообщений: 10
По умолчанию

скажем я не попутал, а макрос для ворда пытаюсь переделать под ексель. и не могу правельно задать цикл для замены найденого на выбраном листе
Сергей Цахло вне форума Ответить с цитированием
Старый 08.09.2015, 00:16   #15
Сергей Цахло
Пользователь
 
Регистрация: 04.09.2015
Сообщений: 10
По умолчанию

в макросы только вникать начал и у меня ещё не хватает мозга переделать не говоря уже о написании с нуля. Принцып действия понимаю а вот как правельно написать не знаю..(
Сергей Цахло вне форума Ответить с цитированием
Старый 08.09.2015, 10:24   #16
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Тогда должно быть так
Код:
 Dim wsS As Ranges, wsb As Object, wsWS As Object
 Set wsb = CreateObject("Word.Application")
 Set wsWS = wsb.documents.Open(ПутьШаблона)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 08.09.2015, 10:27   #17
Сергей Цахло
Пользователь
 
Регистрация: 04.09.2015
Сообщений: 10
По умолчанию

для ворда я знаю как, а мне нужно для екселя
Сергей Цахло вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из StringGrid в Excel по шаблону Dotha Общие вопросы Delphi 5 31.08.2013 14:16
Автозаполнение Excel из даных таблицы. Dima13 Microsoft Office Excel 2 07.06.2012 18:04
выгрузка в Excel по шаблону Swatch Microsoft Office Access 4 10.11.2010 23:46
Заполнение документа Word из массива даных Excel sasha_prof Microsoft Office Excel 2 27.01.2010 11:10
Как указать путь к шаблону excel ??? antoni БД в Delphi 4 04.11.2008 11:22