Статьи из блога

Статьи из блога

Отправка документа на печать на разные сетевые принтеры

Рубрика: Вопрос-Ответ, Макросы, Советы и cекреты, Настройка Word
Метки: |
Понедельник, 17 августа 2009 г.
Просмотров: 10309
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

Поступил интересный вопрос от Павла. Он спрашивает:

У меня подключено несколько сетевых принтеров. Можно ли с помощью разных кнопок-макросов печатать на разные предопределенные принтера, а не только на принтер по умолчанию?

Мой соавтор Александр Витер предложил воспользоваться методом ActivePrinter, и я набросал небольшой макрос.

 

Пусть, например, у вас есть сетевой принтер по имени "Полное_Сетевое_Имя_Принтера" (смотрите наименования в настройках печати). Тогда макрос будет следующий:

 

Public Sub prNet()
'Печать документа из сетевого принтера, установленного не по умолчанию
Dim sMyPrinter As String
Dim netPrinter As String
'Запоминаем текущий принтер по умолчанию
   sMyPrinter = Application.ActivePrinter
'Присваиваем переменной имя сетевого принтера
   netPrinter = "Полное_Сетевое_Имя_Принтера"
'Делаем активным сетевой принтер
   Application.ActivePrinter = netPrinter
'Печатаем документ с текущими настройками
   ActiveDocument.PrintOut
'Восстанавливаем принтер по умолчанию
   Application.ActivePrinter = sMyPrinter
End Sub

 

Сделайте такой же макрос (измените его имя) для других принтеров и выведите кнопки этих макросов на панель инструментов.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 16

  1. Чирок
    17.08.2009 в 20:17 | #1

    Уважаемый Антон, подскажите макрос чтоб назначал каждой букве выделенного текста новый шрифт из 4 -5 мною назначенных, оочень надо.

  2. 17.08.2009 в 20:42 | #2

    Уважаемый Чирок, а как вы представляете себе это назначение?

    Конечно, это можно сделать, просто если в слове будет не 4-5 букв, а 8, то как должно происходить назначение шрифта для каждой буквы? Да, и если те же 4-5 букв в слове - как должно по-вашему происходить это назначение? Как вы видите эту ситуацию, чтобы ее можно было практически реализовать?

  3. Чирок
    17.08.2009 в 21:03 | #3

    назначать случайно или по порядку - неважно. практическая задача - создать "рукописный" текст принтером. есть 4 шрифта с моим почерком нада их перемешать в выделеном тексте и тогда две рядом стоящие буквы "с" будут отличатся друг от друга

  4. 17.08.2009 в 21:03 | #4

    Решил в лоб. Каждой букве выделенного текста назначается свой шрифт из заданных в массиве.

    Sub AssignFontForLetter()
      Dim arFontNames()
      Dim LoopCounter As Long, i As Integer
      'Массив с именами шрифтов
      arFontNames = Array("Arial", "Times New Roman", "Comic Sans Serif", "Courier New", "Lucida Console")
      'Счетчик циклов перебора массива
      LoopCounter = 1
      Do While Selection.Characters.Count <> LoopCounter
        For i = 0 To UBound(arFontNames)
          If Not Selection.Characters(LoopCounter + i) Is Nothing Then _
            Selection.Characters(LoopCounter + i).Font.Name = arFontNames(i)
        Next
        LoopCounter = LoopCounter + UBound(arFontNames) + 1
      Loop
    End Sub

  5. Чирок
    17.08.2009 в 21:33 | #5

    Решил в лоб.
    Супер! Ура! Нечеловеческое вам спасибо.

  6. 18.08.2009 в 07:00 | #6

    Вполне хватило бы и человеческого. :)

    Только зачем это нужно? Преподаватель придумал?

    Предложу еще вариант со случайным выбором шрифта:

    Sub AssignRandomFontForLetter()
      Dim arFontNames()
      Dim oChar As Range
      'Массив с именами шрифтов
      arFontNames = Array("Arial", "Times New Roman", "Comic Sans Serif", "Courier New", "Lucida Console")
      'Инициализация генератора случайных чисел
      Randomize
      'Перебираем все символы в выделении
      For Each oChar In Selection.Characters
        'Генерируем случайное число в диапазоне от 0 до размера массива
        i = Int(Rnd() * (UBound(arFontNames) + 1))
        'Задаем шрифт очередного символа
        oChar.Font.Name = arFontNames(i)
      Next oChar
    End Sub

  7. 18.08.2009 в 09:20 | #7

    Кстати добавлю, что при выделении слова, например, двойным щелком по нему, будет выделен также и стоящий за словом пробел (если слово не заканчивается знаком препинания). И если воспользоваться первым макросом, то в конце выполнения кода может (!) появиться ошибка.

    Можно ее исключить, если добавить в код обработчик ошибок:

    On Error Resume Next

    либо добавить операторы сжатия выделенного диапазона (убрать лишний пробел из выделения в конце слова):

    With Selection
       If Right(.Range, 1) = Chr(32) Then
          .MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
       End If
    End With

  8. Чирок
    18.08.2009 в 11:15 | #8

    Вполне хватило бы и человеческого. :)
    Только зачем это нужно? Преподаватель придумал?

    Работаю простым пожарным, все было хорошо пока не явился господин Шойгу и не возжелал себе армию спасателей - пожарную охрану вывели из МВД и сунули под МЧС, наплодили подструктур и понаставили начальников-армейских отставников!(а они все деревянные)Теперь по всей стране пожарные, как школяры пишут в тетрадках конспекты по 50 - 60!!! листов в день! и ладно если бы в конспектах было что то новое, или полезное. Деревянные начальники ПРОВЕРЯЮТ! тетради(не бай бог мало написано), !!!после отпуска восстанавливать все что пропустил!!! лишают премий и объявляют выговоры. Пробовали писать "под расческу" - не вышло. У меня тут скоро отпуск заканчивается, принтер я уже переделал, чтоб тетрадь развернутая целиком залазила, печатать в ней получилось, дело только за рукописным шрифтом

  9. Чирок
    18.08.2009 в 11:24 | #9

    ваш макрос уже успешно оперирует 5ю шрифтами создаными в фонткреаторе под мой почерк. одного шрифта было недостаточно т.к. в ,например, аббривеатуре СССР три якобы рукописные буквы абсолютно одинаковы, чего, несомненно, в рукописном тексте не бывает

  10. 18.08.2009 в 12:01 | #10

    Вот же как бывает!

    "Голь на выдумку хитра", как бы не усложняли нашу жизнь.

  11. 18.08.2009 в 12:02 | #11

    Боюсь, что будет похоже на почерк не совсем трезвого человека :)

    Покажите хоть скрины того, что получилось. Документы не выкладывайте, т.к. у нас нет ваших шрифтов.

  12. 18.08.2009 в 12:03 | #12

    Да, покажите результат - дайте ссылку на скрин.

  13. Руслан
    31.08.2009 в 17:09 | #13

    Напишите, пожалуйста, макрос, котрый распечатовал несколько документов(десятки rtfных файлов)по 2 страницы на листе!!!Заранее спасибо

  14. 31.08.2009 в 18:02 | #14

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

    Sub PrintMultiplyFiles()
      Dim i As Integer
      With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .ButtonName = "Выбрать"
        .Title = "Выберите файлы для печати"
        .Filters.Clear: .Filters.Add "Файлы RTF", "*.rtf"
        If .Show Then
          For i = 1 To .SelectedItems.Count
            Application.PrintOut FileName:=.SelectedItems(i), PrintZoomColumn:=2
          Next i
        End If
      End With
    End Sub

  15. Ольга
    06.07.2010 в 20:18 | #15

    Здравствуйте! Спасибо за макросы с перебором шрифтов. В продолжение темы, не могли бы вы написать макрос, который рандомизирует отступ в начале строки - чтобы текст не выглядел очень ровным слева, что может вызвать подозрение у читающего. Заранее спасибо!

  16. Виктория
    29.09.2011 в 16:38 | #16

    Подскажите, плиииз!!!nакая ситуация, у меня в программе MIKROSOFT OFFICE WORD созданы накладные, там в двух местах надо указать номер накладной, можно ли сделать так, чтобы при распечатывании каждая последующая накладная в графе НОМЕР НАКЛАДНОЙ автоматически увеличивалась на 1???? (от руки тысячами пронумировывать ооочень тяжко) заранее спасибо!!!!

Оставьте комментарий!

(обязательно)

^ Наверх