Макрос, который проверяет, сколько копий напечатано или блокирует печать, кроме макроса - PullRequest
0 голосов
/ 11 июня 2018

Я ищу помощь в создании простого макроса для Word 2013, который проверяет, печатает ли пользователь более 1 копии, и отменяет ли задание на печать.

Некоторые решения, такие как:

  • Принудительное задание на 1 копирование задания на печать
  • MsgBox "Вы должны выбирать только 1 копию за один раз"

Очевиднофорсирование 1 автоматически будет лучше, но, вероятно, более сложным.Я полагаю, что просто приглашение + отмена задания на печать было бы проще всего, и тогда пользователь может вернуться и перейти к печати на 1 копию.

Причина:

У меня есть макрос, которыйпечатает документы с возрастающим номером, но если вы выберете «Напечатать 2 копии», то макрос спросит «Сколько копий», а вы ответите 2, вы получите 4 документа.

2x Doc # 1
2x Doc # 2

Мне нужно, чтобы пользователи ВСЕГДАвыберите 1 копию на экране печати Word, затем выберите количество копий в окне подсказки макроса.

Как мне применить это?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Таким образом, мое решение включало флаг в ActiveDocument.PrintOut, который указывает копии Copies:=1.Это вошло в макрос, который печатает документы и внутри DocumentBeforePrint, который я использую Cancel = True.

. Это позволяет пользователю выбирать любое число, которое он хочет в Word, и оно направляется на Cancel = True, затемМакрос спрашивает «сколько копий вы хотите» и печатает количество копий X, увеличивая число каждый раз.Как-то раньше, даже Макрос брал количество копий, заданное в слове, и применял его в макросе, поэтому я получал дубликаты того же документа с серийным номером, который был не тем, что я хотел.

Я вижу пользователейпомещая одно и то же число в Word и в макрос MsgBox, но на самом деле они могут просто помещать что угодно в Word, и важен только макрос MsgBox.

Последние два фрагмента кода выглядят так:

Public WithEvents App As Word.Application
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

'Cancel = True = Don't bother printing whatever was selected in Word Print Page
Cancel = True
Call FilePrint

End Sub

Модуль:

Sub FilePrint()
Dim i As Long, j As Long
With ActiveDocument
     j = CLng(InputBox("How many copies to print?", "Print Copies"))
  For i = 1 To j
    With .CustomDocumentProperties("Counter")
      .Value = .Value + 1
    End With
    .Fields.Update
    ' Added Copies:=1 to force no Duplicates!
    ActiveDocument.PrintOut Copies:=1
  Next
  .Save
End With
End Sub
0 голосов
/ 11 июня 2018

Одним из решений является отключение всех кнопок и команд печати (отключить меню - например, CommandBars("Standard").Items(ID:=XX).Enabled = False, где XX - идентификатор для параметров печати и быстрой печати), а затем разрешить только пользовательский макрос печати вызывать функции печати.Вам также придется отключить кнопки печати на ленте и горячую клавишу (команда OnKey для «^ p»), которую вы также можете перенаправить в свой макрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...