Добрый вечер. Не так давно я решил для себя освоить vba. Интересовался массовой рассылкой по базе данных. В интернете попался довольно таки интересный проект. Прошу помощи в разборе кода, если не сложно. Синтаксис немного мне знаком, но работы в целом я не понимаю. Был бы рад помощи. Спасибо. Прикладываю файл. Для остальных код ниже:
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 WA As Word.Application, WD As Word.Document: Set WA = New Word.Application ' c подключением библиотеки Word Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application" ' без подключения библиотеки Word
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 WD = WA.Documents.Add(ПутьШаблона): DoEvents
pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО For i = 1 To КоличествоОбрабатываемыхСтолбцов FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
' так почему-то заменяет не всё (не затрагивает таблицу) 'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
pi.line3 = "Заменяется поле " & FindText With WD.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, "Сохранение файла ...", ФИО, " " WD.SaveAs Filename: WD.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
Спасибо... Длинные "простыни" не нужно выкдадывать в сообщение, себе же тему портите. Или в файле в модуле, или в .txt, или прятать под спойлер Для оформления сообщения (в т.ч. кода) есть кнопки с тэгами (над полем для письма) [МОДЕРАТОР]
И где же вы нашли такой? Это только то что я нашел в поиске googla по 1 строке "вашего" макроса Во первых раз Во вторых два И там есть ссылка на архив. В котором все есть. А что именно Вы хотели разобрать в вашем примере? У Вас для создания конвертиков или шаблонов договоров, должен быть сделан ВАШ шаблон, с той расстановкой, которая Вам необходима. Если Вы, именно хотите, научится это делать, то не лезьте сразу в такие дебри, берите в екселе создавайте Ваш договор и просто на нужные места формулами подставляйте значения.
И на будущее более подробно описывайте что Вы хотите сделать, а то понятие массовая рассылка по базе и создание шаблонов из базы это немного разные понятия.
Добрый вечер, Антон. Спасибо за совет. Шаблон договора есть. Прикрепить его не получается. Проблема в том, что я не понимаю этот код. И хотелось бы разобрать каждую строчку. Вбивать каждую строчку в гугл можно конечно, но с помощью этого не достичь полного понимания кода этой программы.
А зачем вбивать в Гугл? Просто почитайте книжку по VBA - тогда непонятных строк будет меньше. И уже с конкретными вопросами сюда. А так...Вам комментарии напишешь - так у Вас еще больше вопросов возникнет от непонимания основ. А преподавать и разжевывать Вам тут никто не будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Поместите шаблон договора в ту же папку, где и файл договор.xls и запустите макрос в пошаговом режиме, нажимая кнопку F8. В окне Locals смотрите за изменением переменных, так можно разобрать все строки. Наблюдайте также, что происходит на экране, какие новые папки образуются, с какими названиями и по каким путям. Удачи в освоении.
Там все можно настроить (b возможностей раз в 10 больше), - и не надо будет лазить в код. К тому же, есть выбор почтовой программы для рассылки (Outlook, или TheBAT)
Основы программирования мне известны. Мне просто нужны комментарии по коду программы.
Если бы они были известны - то дополнительные комментарии не нужны были бы, т.к. основные комментарии в коде есть и многие переменные обозначены на русском языке и достаточно красноречивы. По сути следующие комментарии должны дать Вам понять основной алгоритм (см. код.txt) И зная основы программирования именно в VB прочитать это не составит труда. Судя по всему, у Вас может и есть знания по основам программирования, но явно не в VB.