Макрос, который проверяет, сколько копий напечатано, или блокирует печать, кроме макроса

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

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

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

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

Обоснование:

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

2x Doc # 1
2x Doc # 2

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

Как я могу добиться этого?


person FreeSoftwareServers    schedule 11.06.2018    source источник
comment
stackoverflow.com/questions/37465969/   -  person FreeSoftwareServers    schedule 12.06.2018


Ответы (2)


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

person AJD    schedule 11.06.2018
comment
Близкий, но слишком сложный метод. Я не думаю, что есть способ сделать то, что я просил выше, но я собираюсь использовать метод, очень похожий на то, что вы ответили - person FreeSoftwareServers; 11.06.2018
comment
Я просто собираюсь использовать событие before print, чтобы отменить все задания на печать и отобразить сообщение о печати только с помощью клавиши Macro Short. - person FreeSoftwareServers; 11.06.2018
comment
... почему бы не отменить задания на печать, а затем просто запустить макрос? Конечно, с этим подходом есть пара подводных камней, но я уверен, что вы с этим справитесь! - person AJD; 11.06.2018

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

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

Я вижу, как пользователи вводят один и тот же номер как в Word, так и в Macro MsgBox, но на самом деле они могут просто помещать все, что в Word, и имеет значение только Macro 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
person FreeSoftwareServers    schedule 12.06.2018