| | lightyear 
 Newbie
 | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день
 С наступающими праздниками
   
 В связи с этими самыми праздниками передо мной возникла небольшая задачка, нужно отослать массу поздравлений (200 шт.)
 Естественно, их очень не хотелось верстать руками, учитывая, что они достаточно однотипны, возникла мысль сделать список, по которому все это и сгенерить и выкинуть в Ворд, 1 поздравление - 1 страница, напечатать и вперед
   + это же решение чудно подойдет не только на Пасху), но и к любому другому празднику, когда нужны массовые поздравления.
 Пользователь - секретарь, умеет что-от набить в Excel и запустить макрос
  . 
 VBA вообще пользуюсь от случая к случаю, но на этот раз он выглядел самым подходящим решением вопроса
 Хочу сказать спасибо Вашему форуму, Вы дали мне направление поиска, а дальше все было легко
   
 Все сделано элементарно в одной к книге, к которой макрос и прикреплен, никаких передаваемых или настраиваемых параметров не делалось, ибо на скорую руку
 Устройство книги
 В книге два листа
 Список
 Столбец А - № п/п - для макроса вообще говоря не надо, но для списка пригодиться
 Столбец В - Фамилия
 Столбец С - Имя Отчество (для украинского языка сразу в кличному відмінку, напр. Олено Миколаївно)
 Столбец D - Пол (ж/м)
 Столбец Е -  Признак включения в список поздравляемых (0/1)
 Остальные столбцы произвольны (наши  товарищи их приспособили под фирмы и адреса)
 
 Поздравление
 Ячейка А1 - текст поздравления (многостроное набирается через Alt+Enter)
 Ячейка B1 - обращение к мужчине (Дорогой/Любимый/Родной)
 Ячейка C1 - обращение к женщине (Дорогая/Любимая/Родная)
 Ячейка D1 - регалии (С уважением, большой начальник)
 Ячейка E1 - посылатель поздравления (ФИО большого начальника)
 
 И сам макрос, который по книге указанной структуры, выборочно для товарищей у кого в признаке поздравления стоит 1, генерит поздравления в ворд по ходу форматируя
 
 
 Код:
 | Dim i As Integer
 Dim g As String
 Dim s As String
 Dim s1 As String
 Dim female As String
 Dim male As String
 Dim result As String
 Dim wrd As Variant
 Dim myRange As Variant
 
 Worksheets("Поздравление").Activate
 g = Range("A1").Value
 male = Range("B1").Value
 female = Range("C1").Value
 s = Range("D1").Value
 s1 = Range("E1").Value
 
 Set wrd = GetObject(, "Word.Application")
 wrd.Visible = True
 wrd.Documents.Add
 Set myRange = wrd.Selection
 myRange.Font.Size = "16"
 myRange.Font.Name = "Times New Roman"
 myRange.Font.Italic = True
 
 Worksheets("Список").Activate
 For i = 1 To 1000 Step 1
 result = ""
 
 If Range("C" & i).Value = "" Then 'list ends
 Exit For
 End If
 
 If Range("E" & i).Value = 1 Then 'include this record
 
 
 If Range("D" & i).Value = "m" Then   'is man?
 result = result & male
 Else
 result = result & female
 End If
 
 result = result & " " & Range("C" & i) & "!"
 
 myRange.ParagraphFormat.Alignment = 1 'center
 myRange.Font.Bold = True
 myRange.TypeText result
 
 myRange.TypeParagraph
 myRange.TypeParagraph
 
 myRange.ParagraphFormat.Alignment = 1 'center
 myRange.Font.Bold = False
 myRange.TypeText g
 
 myRange.TypeParagraph
 myRange.TypeParagraph
 myRange.ParagraphFormat.Alignment = 0 'left
 myRange.Font.Size = "14"
 myRange.Font.Bold = True
 myRange.TypeText s
 
 myRange.TypeParagraph
 myRange.TypeParagraph
 myRange.ParagraphFormat.Alignment = 2 'right
 myRange.TypeText s1
 
 'break new page
 myRange.InsertBreak Type:=7
 End If
 Next
 
 Set wrd = Nothing
 End Sub
 
 | 
 
 ! Периодически возникает проблема с созданием объекта Word, решается просто пользовательсикм запуском Word, в смысле если Word уже запущен макрос в Excel отрабатывает без проблем
 
 Может кому-то пригодиться в качестве "рыбы" или при решении сходных задач
 
 |  | Всего записей: 1 | Зарегистр. 24-04-2008 | Отправлено:  19:32 24-04-2008  | Исправлено: lightyear,   19:43 24-04-2008
 | 
 |