|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.09.2009, 07:37 | #1 |
Пользователь
Регистрация: 30.08.2009
Сообщений: 36
|
Авто вставка № договора и печать документа
Здравствуйте. Нужно автоинкриментно(+1) вставлять номер договора и пускать на печать, 50 копий в 2 экземплярах. Скажите пожалуйста, как такое сделать?
Шапку прикрепил. |
09.09.2009, 07:55 | #2 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Один из вариантов
А почему 50 копий в 2-х экземплярах, а не 100 копий?
Смотрите пример. Номер будет увеличиваться при каждой отправке на печать. Печатать будет 100 копий с одним и тем же номером. Я немного изменил форматирование, чтобы место, которое вы сделали подчеркнутым для номера, таким и осталось. Как сделано: на место номера, который должен меняться, я поставил поле последовательной нумерации { SEQ AutoIncrement \r 1}, которое начинает нумерацию с числа, стоящего после ключа \r. Затем макрос, который вызывается при печати, увеличивает это поле на 1 и печатает документ. Вот код макроса: Код:
Обращаю внимание, что макрос будет срабатывать только в случае выбора команды «Печать…» в меню, или при сочетании клавиш Ctrl+P. Если вы нажмете кнопку «Быстрая печать», то документ напечатается в одном экземпляре и номер увеличиваться не будет.
Лучше день потерять — потом за пять минут долететь!©
Последний раз редактировалось viter.alex; 09.09.2009 в 09:37. Причина: Добавил пояснения и код макроса |
09.09.2009, 08:01 | #3 |
Пользователь
Регистрация: 30.08.2009
Сообщений: 36
|
Можно 100, как параметр, главное что бы на автомате выполнялась задача.
|
09.09.2009, 08:19 | #4 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
А можно еще сделать закладкой, текст которой нужно увеличивать на единицу
А можно сделать через переменные документа А можно просто колбасить каждый раз новый документ с новым номером. Вариантов масса.
Лучше день потерять — потом за пять минут долететь!©
|
09.09.2009, 10:34 | #5 |
Пользователь
Регистрация: 30.08.2009
Сообщений: 36
|
Алекс, вы не правильно поняли задачу. Нужно по 2 копии каждого номера. Например сейчас напечатался 2 номер 2 раза, затем должен инкрементироватся номер договора и с номером 3 напечататься 2 копии, потом с номером 4 две копии, с №5 две копии, и так до заданого номера договора.
|
09.09.2009, 11:03 | #6 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Вариант номер два
Ясно. Тогда делаем так:
Код:
Лучше день потерять — потом за пять минут долететь!©
|
09.09.2009, 11:46 | #7 |
Пользователь
Регистрация: 30.08.2009
Сообщений: 36
|
Супер! Спасибо вам большое! Скажите пожалуйста как решить проблемму с выходом за поля печати? Руководствовался описанием данным вами раньше http://programmersforum.ru/archive/i...p/t-38557.html
но выскакиевает ошибка в нормалдоте. Эта строка подсвечивается красным: Private Sub myApplication_DocumentBeforePrint(B yVal Doc As Document, Cancel As Boolean) Скриншот ошибки приложил |
09.09.2009, 12:01 | #8 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
После имени макроса поставь
Application.DisplayAlerts = wdAlertsNone А в конце макроса Application.DisplayAlerts = wdAlertsAll А ошибка из-за того, что ByVal пишется слитно
Лучше день потерять — потом за пять минут долететь!©
Последний раз редактировалось viter.alex; 09.09.2009 в 12:03. |
09.09.2009, 12:21 | #9 |
Пользователь
Регистрация: 30.08.2009
Сообщений: 36
|
Не пойму куда вставлять. пробовал по всякому.
В этой процедуре переставлял 2 строки. предупреждения выскакивали Sub FilePrint() Application.DisplayAlerts = wdAlertsNone Dim CopiesCount As Long Dim sInputStr As String While Not IsNumeric(sInputStr) sInputStr = InputBox("До какого номера договора печатать?", "Распечатка копий договора", sInputStr) If Len(sInputStr) = 0 Then Exit Sub Wend For CopiesCount = 1 To Val(sInputStr) With ActiveDocument .PrintOut Copies:=2 With .Fields(1) .Code.Text = Mid(.Code.Text, 1, InStr(.Code.Text, "\r") + 2) & Val(Trim(Mid(.Code.Text, InStr(.Code.Text, "\r") + 2))) + 1 .Update End With End With Next Application.DisplayAlerts = wdAlertsAll End Sub И в этой функции переставлял 2 строки. Продолжают ошибки выскакивать Application.DisplayAlerts = wdAlertsNone Public WithEvents myApplication As Word.Application Private Sub myApplication_DocumentBeforePrint(B yVal Doc As Document, Cancel As Boolean) If Doc.Name Like "Имя_твоего_документа" Then Application.DisplayAlerts = wdAlertsNone Cancel = False End If Application.DisplayAlerts = wdAlertsAll End Sub |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Печать документа | DennerV | Общие вопросы Delphi | 1 | 01.06.2009 13:23 |
Печать документа с таблицами и форматированием. | snake-as | Общие вопросы Delphi | 2 | 16.05.2009 14:50 |
Вставка поля в новую строку таблицы другого документа!!!! | Окоча Юра | Microsoft Office Word | 6 | 06.03.2009 10:07 |
Печать документа в Memo | vladchyzh | Общие вопросы Delphi | 1 | 29.12.2008 15:01 |
Печать документа из формы | Aleksandr | Microsoft Office Excel | 5 | 28.04.2008 08:27 |