Настройка принтера через VBA в Excel - PullRequest
2 голосов
/ 26 марта 2010

Я пытаюсь назначить ячейку в Excel для пользователя, чтобы ввести имя принтера, на котором он хочет распечатать, а затем использовать это значение в

Application.ActivePrinter = (use the cell value)

Несмотря на то, что я выполнил программирование, присваивая имя ячейке и используя его в переменной, оно выдает мне ошибку.

Я уже установил свою переменную как строку, текст, объект и вариант, и она не работает.

Знаете ли вы, какой код я должен использовать, чтобы сделать это?

Ответы [ 3 ]

3 голосов
/ 27 марта 2010

Безо всех подробностей я бы предположил, что пользователь не вводит всю информацию, необходимую для принтера. В нашей сети наши принтеры настроены таким образом, что для правильной печати Excel вам необходим сервер печати, имя принтера и имя сети. В появившемся окне попробуйте эту строку кода, чтобы увидеть, как вам нужно ввести принтер в электронную таблицу.

debug.Print application.ActivePrinter

Возможно, вы захотите помочь пользователю, предоставив информацию о сервере и сети (если она одинакова для всех принтеров). В моем офисе вы бы использовали что-то вроде этого:

Application.ActivePrinter = "\\printserver\" & _
                            range("printername").value & " on Ne05:"
1 голос
/ 09 февраля 2011

Если вы столкнулись с проблемой, что рассматриваемый принтер не установлен на их компьютере, этот код должен помочь вам:

Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\\SERVER\PRINTER
WshNetwork.AddWindowsPrinterConnection PrinterPath
1 голос
/ 03 апреля 2010

Имена принтеров очень специфичны - если они введены не так, как ожидает Windows, вы получите сообщение об ошибке. (Поскольку вы не заметили конкретное сообщение об ошибке в своем вопросе, я предполагаю, что именно в этом и заключается проблема; это наиболее вероятная проблема.)

Что я сделал в этой ситуации, так это предоставил пользователю список доступных принтеров. Вы можете использовать этот код для заполнения списка (называемого lstPrinters):

Private Sub LoadPrintersListBox()
    Dim prtLoop             As Printer
    Dim strListRowSource    As String

    For Each prtLoop In Application.Printers
        strListRowSource = strListRowSource + prtLoop.DeviceName + ";"
    Next prtLoop

    lstPrinters.RowSource = strListRowSource
End Sub

Затем вы можете использовать выбор пользователя для установки принтера. (В этом коде предполагается, что доступна кнопка с именем cmdSetPrinter, которую пользователь щелкнет после выбора принтера.)

Private Sub cmdSetPrinter_Click()
    Application.ActivePrinter = lstPrinters.Column(0)
End Sub

Вы можете быть уверены, что принтеры в списке названы в соответствии с потребностями системы, и вам не нужно беспокоиться об опечатках.

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