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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2009, 16:41   #1
Nash1
 
Регистрация: 01.07.2009
Сообщений: 8
По умолчанию Поле слияния в виде ряда заполненных клеток

Шаблон письма, в котором мы планируем около 20 полей слияния для персонификации, имеет, помимо текста, цифры в клеточках, по 1 знаку - в каждой. Например, почтовый индекс - это ряд клеточек с 1 знаком в каждой клеточке. Приходится (поскольку в таблице только 20 полей для слияния) загонять в ячейку таблицы с данными не сам почтовый индекс, а готовый ряд клеточек с этим индексом, по 1 знаку - в каждой клеточке. Но функция слияния предполагает импорт ДАННЫХ, а не объекта. Как выйти из этой ситуации? Иметь на каждый знак почтового индекса отдельное поле слияния в таблице данных - это невозможно. Семь ячеек на индекс, потом ещё 6 - на код подразделения, выдавшего паспорт, да еще 13 - на ИНН, получается столько данных, что таблица в ворде на 20 столбцов уже не поможет. Приходится брать таблицу ЭКСЕЛЬ, что превращает такую работу простов каторжный труд. Получается подстановка данных по 50-60 полям слияния!!! Вместо 20!!! Есть ли тут штатное решение от мелкомягких или тут нужен макрос?
Nash1 вне форума Ответить с цитированием
Старый 10.07.2009, 01:03   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Макрос не является чем-то внештатным... но чем вам Excel-то не подходит?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 12.07.2009, 17:35   #3
Nash1
 
Регистрация: 01.07.2009
Сообщений: 8
По умолчанию Эксель точно не устраивает

Представьте себе: поручаю секратаю подготовить письмо, для чего ей бедной нужно заполнить не только данные для 20 полей слияния - для письма, чтобы добиться персонификации: наименование получателя, его адрес, обращение к менеджеру- контактному лицу и т.п., но также еще нужно будет набить в отдельных ячейчах, по одной цифре в каждой ячейке: почтовый индекс, ИНН, ОГРН, КПП, расчетный счёт из 20-25 знаков, каждый знак - в отдельной ячейке... Да она просто уволится, это уже не работа секретаря, ей было бы проще, так она скажет, и будет права - менять данные данные для каждого письма в самом письме, а не в какой-то непонятной её долб. таблице для слияния.
Nash1 вне форума Ответить с цитированием
Старый 14.07.2009, 20:42   #4
roster
Пользователь
 
Регистрация: 25.05.2009
Сообщений: 18
По умолчанию

А ячейки эти самые так сильно нужны?
roster вне форума Ответить с цитированием
Старый 16.07.2009, 10:41   #5
Nash1
 
Регистрация: 01.07.2009
Сообщений: 8
По умолчанию Нужны ли ячейки?

Мне лично - нет. Но так сформирован официальный документ -шаблон, его так сделали в ИФНС. Поэтому - нужны. Я думаю тут эту тему закрыть и предложить кому-либо выполнить для такой функции простенькую программку в ЭКСЕСС.
Nash1 вне форума Ответить с цитированием
Старый 17.07.2009, 23:07   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Когда то у меня была сходная проблема. Решилась следующим образом:
Код:
Public Sub MakeGrid()
   Dim w As Single, h As Single
   Dim nRow As Integer
   Dim nCol As Integer
   Dim i As Integer
   Dim k As Integer
   Dim x1 As Single, x2 As Single
   Dim y1 As Single, y2 As Single
   Dim x As Single
   Dim y As Single
   Dim a As Variant
   Const DeltaX As Single = 2
   w = CentimetersToPoints(0.5)
   h = CentimetersToPoints(0.5)
   'Always set the view to be Page view, with Magnification set to 100%,
   'before using the Information property to get the cursor position
   y1 = Selection.Information(wdVerticalPositionRelativeToPage)
   x1 = Selection.Information(wdHorizontalPositionRelativeToPage) - DeltaX
   'Здесь можно поставить Inputbox для запроса количества строк и колонок в диалоге
   nRow = 1
   nCol = 27
   Application.ScreenUpdating = False
   With Selection
      If Len(.Text) <= 1 Then
          .TypeText (String(nCol, " "))
          .MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
      Else
          nCol = Len(.Text)
      End If
       
       With .Font
           .Name = "Courier New Cyr"
           .Size = 11
           .Spacing = 7.5
       End With
       .MoveLeft Unit:=wdCharacter, Count:=1
   End With
   ReDim a(nCol + nRow + 1)
   k = 0
   With ActiveDocument.Shapes
       y2 = y1 + h * nRow
       a(k) = .AddLine(x1, y1, x1, y2).Name: k = k + 1
       For i = 1 To nCol
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            x = Selection.Information(wdHorizontalPositionRelativeToPage) - DeltaX
            a(k) = .AddLine(x, y1, x, y2).Name: k = k + 1
       Next i
       For i = 1 To nRow + 1
            y = y1 + h * (i - 1)
            a(k) = .AddLine(x1, y, x, y).Name: k = k + 1
       Next i
       .Range(a).Group
   End With
   Application.ScreenUpdating = True
End Sub
Этот макрос создаёт сетку как шейп и устанавливает моноширинный разреженный шрифт. Вам останется только поместить в первую ячейку код вашего поля и стереть лишние пробелы. Последнее, впрочем, легко делать автоматически, добавив в конец макроса код:
Код:
...
for k = 1 to nCol
     Selection.TypeBackspace
next k
Данный подход особенно хорош тем, что обеспечивает автоматический перенос текста между строками при цепном заполнении таблицы (например, для длинных почтовых адресов во всякого рода бланках) просто вставкой в подставляемый текст кода новой строки.
Обратите внимание, что если создавать сетку без привязки к тексту (в моём коде для этого собственно и используется вставка пробелов), на длинных таблицах у Word набегает ошибка.
Вложения
Тип файла: doc Пример.doc (24.5 Кб, 18 просмотров)

Последний раз редактировалось Aent; 18.07.2009 в 00:41.
Aent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет заполненных ячеек extremobile Microsoft Office Excel 2 28.05.2009 17:26
Как настроить эксель, чтобы он открывал в виде таблицы тхт файл с разделителем в виде точки с запятой xhour Microsoft Office Excel 1 05.05.2009 14:17
Найти сумму ряда с точностью e, если дан общий член этого ряда JiLiYa Общие вопросы C/C++ 2 18.02.2009 11:11
Подсчёт непустых клеток mik Microsoft Office Excel 7 27.10.2007 13:40
ComboBox - убийца нервных клеток krem Компоненты Delphi 20 15.06.2007 22:07