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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 07:37   #1
550953
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 36
По умолчанию Авто вставка № договора и печать документа

Здравствуйте. Нужно автоинкриментно(+1) вставлять номер договора и пускать на печать, 50 копий в 2 экземплярах. Скажите пожалуйста, как такое сделать?
Шапку прикрепил.
Вложения
Тип файла: doc Договор купли продажи.doc (28.0 Кб, 28 просмотров)
550953 вне форума Ответить с цитированием
Старый 09.09.2009, 07:55   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Один из вариантов

А почему 50 копий в 2-х экземплярах, а не 100 копий?
Смотрите пример. Номер будет увеличиваться при каждой отправке на печать. Печатать будет 100 копий с одним и тем же номером. Я немного изменил форматирование, чтобы место, которое вы сделали подчеркнутым для номера, таким и осталось.
Как сделано: на место номера, который должен меняться, я поставил поле последовательной нумерации { SEQ AutoIncrement \r 1}, которое начинает нумерацию с числа, стоящего после ключа \r. Затем макрос, который вызывается при печати, увеличивает это поле на 1 и печатает документ. Вот код макроса:
Код:
Sub FilePrint()
  With ActiveDocument
    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
    .PrintOut Copies:=100
  End With
End Sub
Идентификатор, который стоит после SEQ, я выбрал сам, он может быть совершенно произвольным в данном случае.
Обращаю внимание, что макрос будет срабатывать только в случае выбора команды «Печать…» в меню, или при сочетании клавиш Ctrl+P. Если вы нажмете кнопку «Быстрая печать», то документ напечатается в одном экземпляре и номер увеличиваться не будет.
Вложения
Тип файла: doc Договор купли продажи_ch.doc (39.5 Кб, 96 просмотров)
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 09.09.2009 в 09:37. Причина: Добавил пояснения и код макроса
viter.alex вне форума Ответить с цитированием
Старый 09.09.2009, 08:01   #3
550953
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 36
По умолчанию

Можно 100, как параметр, главное что бы на автомате выполнялась задача.
550953 вне форума Ответить с цитированием
Старый 09.09.2009, 08:19   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А можно еще сделать закладкой, текст которой нужно увеличивать на единицу
А можно сделать через переменные документа
А можно просто колбасить каждый раз новый документ с новым номером.
Вариантов масса.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 09.09.2009, 10:34   #5
550953
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 36
По умолчанию

Алекс, вы не правильно поняли задачу. Нужно по 2 копии каждого номера. Например сейчас напечатался 2 номер 2 раза, затем должен инкрементироватся номер договора и с номером 3 напечататься 2 копии, потом с номером 4 две копии, с №5 две копии, и так до заданого номера договора.
550953 вне форума Ответить с цитированием
Старый 09.09.2009, 11:03   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Вариант номер два

Ясно. Тогда делаем так:
Код:
Sub FilePrint()
  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
End Sub
Окно с запросом на ввод будет появляться до тех пор, пока не введешь число или не нажмешь «Отмена»
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 09.09.2009, 11:46   #7
550953
Пользователь
 
Регистрация: 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)

Скриншот ошибки приложил
Изображения
Тип файла: jpg Безымянный.jpg (22.3 Кб, 142 просмотров)
Вложения
Тип файла: rar Безымянный.rar (73.9 Кб, 15 просмотров)
550953 вне форума Ответить с цитированием
Старый 09.09.2009, 12:01   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

После имени макроса поставь
Application.DisplayAlerts = wdAlertsNone
А в конце макроса
Application.DisplayAlerts = wdAlertsAll

А ошибка из-за того, что ByVal пишется слитно
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 09.09.2009 в 12:03.
viter.alex вне форума Ответить с цитированием
Старый 09.09.2009, 12:21   #9
550953
Пользователь
 
Регистрация: 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
550953 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать документа 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