• Главная
  • Карта сайта
Не найдено

Спуск смуг з word

  1. Про Basic'е потужному замовте слово ...
  2. Запис дій користувача в макрос (програму VBA)
  3. Редагування записаного макросу
  4. Редагування команди друку
  5. Створення та ініціалізація змінних
  6. Формування змінних для підстановки в команду друку
  7. Next
  8. Мінлива sFileNamePS (повний шлях для запису PostScript-файлу)
  9. вместо Висновки

9 - 2002
9 - 2002   Сергій Горбачов   Про Basic'е потужному замовте слово

Сергій Горбачов

Про Basic'е потужному замовте слово ...

Запис дій користувача в макрос (програму VBA)

Редагування записаного макросу

Редагування команди друку

Створення та ініціалізація змінних

Формування змінних для підстановки в команду друку

Мінлива sListOfPages (список сторінок для друку в PostScript-файл)

Next

Мінлива sFileNamePS (повний шлях для запису PostScript-файлу)

замість висновку

У попередній частині статті розповідалося, як за допомогою друку на віртуальний принтер можна здійснити спуск смуг з Word. Але там же зазначалося, що «ручне» визначення діапазону сторінок для друку не тільки досить трудомістким, але і вельми ненадійно, оскільки помилка навіть в одній цифрі здатна остаточно завалити всю роботу. Щоб вирішити цю проблему, слід використовувати можливості програмування на мові Visual Basic for Application (VBA), який є невід'ємною частиною офісного пакету Microsoft Office.

Про Basic'е потужному замовте слово ...

VBA - вельми потужний об'єктно-орієнтована мова, що дозволяє виконувати найрізноманітніші завдання. Природно, що в одній статті неможливо описати всі можливості цього чудового інструменту, та й завдання наша інша - показати на конкретному прикладі можливості і прийоми автоматизації додрукарської підготовки. Тому ми будемо описувати тільки те, що необхідно для розуміння роботи конкретної програми.

Перш за все нагадаємо, що вже в ранніх версіях офісного пакету була присутня можливість запису і використання макросів (тобто наборів команд, що виконують певні функції). Зараз макроси замінені повноцінною мовою програмування, але назва залишилася і в пункті головного меню Сервіс присутній підміню Макрос. Нехай вас це скромне назва не вводить в оману - під ним ховається цілий ряд дивно ефективних можливостей, якими просто гріх не скористатися.

Якщо ви поки ще не знайомі з мовою програмування VBA - не біда, сама «конструкція» офісного пакету дає користувачеві прекрасну можливість освоїти елементарні прийоми роботи з ним, записуючи макроси і аналізуючи їх. Звичайно, таким способом навряд чи можна написати повноцінні програми, але подібне завдання перед нами і не варто. Нам лише потрібно за допомогою VBA автоматизувати рутинні операції підготовки видань до друку, а з цим завданням нам впоратися цілком під силу. Повторимося: VBA - повноцінний і дуже потужна мова програмування, для повного опису якого буде потрібно багатотомне видання, тому в статті будемо говорити тільки про ті можливості та особливості мови, які нам знадобляться.

Почнемо з самого простого: запишемо макрос і подивимося на його структуру (трохи пізніше ми цю структуру будемо редагувати; до речі, запис макросу і його наступний аналіз - кращий спосіб первісного вивчення VBA).

Необхідно відзначити, що програма, яка зараз буде описана, досить проста і тому вимагає деякого «ручного» контролю, зокрема потрібно ретельно стежити, щоб кількість сторінок в документі було кратно чотирьом і нумерація починалася з першої сторінки. Якщо ці умови не будуть дотримані, то порядок сторінок в вихідному файлі буде неправильним. Коли читачі ознайомляться із загальною концепцією побудови такої програми, вони зможуть самостійно дописати необхідні модулі контролю (у автора вони написані). Поки що - основи.

Запис дій користувача в макрос (програму VBA)

Оскільки ми маємо написати програму для друку на віртуальний принтер, давайте з цього і почнемо.

Почати запис макросу можна як мінімум двома способами.

  • вибравши «Сервіс» => Макрос => Почати запис
  • натиснувши кнопку «ЗАЛ» в рядку стану Word ( Мал. 1 ).

І в тому, і в іншому випадку з'явиться діалогове вікно запис макросу ( Мал. 2 ).

Назвемо макрос Спуск_полос. При іменуванні макросу дуже важливо пам'ятати, що ім'я макросу можна записувати і кирилицею, але в ньому не повинно бути пробілів: всі прогалини слід замінити нижній рискою «_», інакше при спробі виконання буде видана помилка і програма зупиниться. Зазначимо, що цей макрос буде доступний для всіх документів (шаблон Normal.dot), і натиснемо кнопку Ok. На екрані з'явиться маленька панель інструментів, яка вказує, що програма знаходиться в стані запису макросу. На ній всього дві кнопки: Зупинити запис і Пауза. Тепер до того моменту, поки користувач не натисне кнопку Зупинити запис, практично всі наші дії з документом будуть записуватися.

Відправимо на віртуальний принтер наш документ (як встановити віртуальний принтер і як налаштувати систему для коректної підготовки та обробки PostScript-файлів, описано в попередній частині статті).

настройки меню друку повинні виглядати ось так:

  • Принтер ... ім'я: Linotronic 330
  • Масштаб ... число сторінок на аркуші: 2
  • Масштаб ... за розміром сторінки: Поточний або А4
  • Сторінки ... номера: «16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9» (це у випадку, якщо друкуємо 16-сторінкову брошуру).

Натискаємо Ok - і програма просить вказати папку, куди слід помістити створюваний PostScript-файл. Зазначимо підкаталог In папки спостереження (Watched Folder), яку ми визначили раніше для Acrobat Distiller (див. Попередню частину статті). Це означає, що при активному Acrobat Distiller будь коректно створений PostScript-файл, поміщений в цю папку, буде автоматично перетворюватися в PDF-файл і поміщатися в підкаталог Out тієї ж папки. Папка спостереження може перебувати де завгодно, хоча, щоб не плутатися, я, як правило, створюю її в кореневому каталозі системного диска і розміщую туди все створювані PostScript-файли.

Тепер ще раз Оk - і буде створений PostScript-файл, а команда друку запишеться у вигляді макросу. Натиснемо кнопку Зупинити запис ( Мал. 3 ) - макрос друку записаний, і можна його редагувати, дописуючи необхідні команди.

Викличемо вікно макросів (або натиснувши Alt-F8, або через головне меню Сервіс -> Макрос -> Макрос). З'явиться діалогове вікно Макрос ( Мал. 4 ). Оскільки наш макрос ми записали в загальний шаблон Word (Normal.dot), то в списку Макроси з: вкажемо саме цей шаблон.

Відкриємо макрос Спуск_полос, натиснувши кнопку Змінити. Тим самим ми запускаємо редактор програм VBA, де і будемо редагувати нашу програму. Поки що вона має такий вигляд, як в лістингу 1 .

Зверніть увагу, що програма починається рядком Sub з ім'ям макросу і дужками після цього імені, а завершується рядком End Sub. Це - обов'язкова умова для роботи програми на VBA. Відзначимо також, що деякі рядки починаються зі знака апострофа. Це - коментарі, які служать для пояснення як роботи програми в цілому, так і її окремих елементів. Як правило, в редакторі VBA рядки коментарів стануть зеленими.

Редагування записаного макросу

Маючи записаний макрос, можемо приступити до його редагування. Але спочатку визначимося, що в ньому має бути для успішної роботи.

Структурно наш макрос буде складатися з наступних частин:

  1. Створення та ініціалізація змінних.
  2. Формування змінних для друку.
  3. Частина, що (друк документа).

Частина, що вже готова - це дві останні команди (визначення активного принтера і власне друк). А ось перші дві частини ми будемо дописувати.

При цьому в першій частині ми створимо і инициализируем всі необхідні нам змінні, а в другій - дамо цим змінним необхідні значення. Почнемо редагувати наш макрос з останньої, найпростішої команди друку. Це - третя частина нашої програми.

Редагування команди друку

У цій частині (та й поки що в усій нашій програмі) всього дві команди: перша визначає активний принтер, на якому буде друкуватися документ; друга встановлює параметри друку і друкує документ. Друга команда досить довга, тому розбита на кілька рядків за допомогою символу підкреслення (нижній дефіс) «_». Цей знак говорить про те, що команда не завершена і продовжується в наступному рядку.

Першу команду ми залишимо незмінною, а деякі частини другої будемо модифікувати.

Відразу ж видалимо частина команди, виділену червоним кольором (FileName: = "",), - вона нам не потрібна.

Для виконання поставленого завдання нам слід змінити тільки два елементи в команді друку на віртуальний принтер (інші частини цієї команди вже містять необхідну інформацію для друку двох сторінок на аркуші А4, і ми їх чіпати не будемо).

Поки що ці елементи, які потрібно змінити в команді друку, виглядають ось так:

а) список сторінок для друку (Pages: = "16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9") і

б) повне ім'я створюваного PostScript-файлу, який потім буде перетворений в PDF (OutputFileName: = "").

Спочатку замість рядків, що визначають параметри цих елементів, підставимо імена змінних: sListOfPages - список сторінок для друку і sFileNamePS - повне ім'я створюваного PostScript-файлу.

Після початкової правки наш макрос прийме такий вигляд (перші дві частини поки що порожні), як в лістингу 2 .

Синім кольором виділені ті рядки команди в виконуваної частини, куди ми підставимо значення сформованих змінних.

Створення та ініціалізація змінних

Взагалі-то за суворими правилами програмування слід було б спочатку визначити всі змінні, використовувані в програмі, і вказати їх тип. Але оскільки у нас всього один невеликий модуль і питання економії пам'яті і швидкодії програми для нас не критичні, надамо VBA самостійно визначати змінні при їх створенні та ініціалізації, тобто в момент першого присвоєння значення.

В лістингу 3 наведено список всіх змінних, які знадобляться нам для коректної роботи програми. Зверніть увагу, що всі змінні в програмі мають префікси, які вказують на тип змінної: символьний (s) або чисельний (n). Це хоча і не обов'язково, але дуже корисно, щоб не плутатися в ідентифікації змінних.

Велика частина цих змінних потрібна нам для розрахунків, а в виконувану частину програми підставимо всього дві «фінішні» змінні: sListOfPages - діапазон сторінок для друку і sFileNamePS - повне ім'я PostScript-файлу.

Вже тут ми вкажемо значення для численних змінних nPageStart і nPageFinish (1 і 16 відповідно). Ці змінні створені на початку списку не випадково, оскільки, поки не написаний модуль контролю кількості сторінок в документі, ці параметри потрібно буде ставити явно. Тобто якщо в документі не 16 сторінок, а більше або менше, то потрібно просто відкрити макрос для зміни (Alt-F8 => вибрати макрос Спуск_полос =>) і ввести замість числа 16 реальну кількість сторінок вашого документа. Відразу ж після цього на основі змінних nPageStart і nPageFinish створені змінні sPageStart і sPageFinish, що містять ті ж дані, тільки перетворені в символьний вид за допомогою функції Str ().

Формування змінних для підстановки в команду друку

Мінлива sListOfPages (список сторінок для друку в PostScript-файл)

Вміст змінної sListOfPages ми вже вводили вручну, залишилося тільки придумати, як її розрахувати автоматично.

По суті, все дуже просто: потрібно, починаючи з першої і останньої сторінок документа, йти від «країв» до «середини», формуючи рядок, що складається з пар сторінок; причому в кожній парі першої (лівої сторінкою розвороту) завжди повинна стояти парна сторінка. Для цього в змінну sListOfPages будемо послідовно додавати пари сторінок, присвоєні змінної sPagesPrint.

Почнемо цикл For ... Next, який буде «йти» за номерами сторінок від першої (певної в змінної nPageStart) до середини списку (номер останньої сторінки, поділений на два: nPageFinish / 2).

Таким чином цикл послідовно «перебере» номери сторінок від 1 до 8, кожен раз привласнюючи змінної лічильника nCounter поточне значення:

For nCounter = nPageStart To nPageFinish / 2

... (сюди потрібно вставити все, описані надалі в цьому розділі команди)

Next

Для створення цієї частини програми виконаємо наступне:

  1. Визначимо номера пар сторінок для кожного друкованого аркуша. Очевидно, що менший з номерів в кожній парі - просто поточне значення лічильника. Для підстановки в строкову змінну номера сторінки необхідно перетворити чисельне значення лічильника в символьний рядок, що ми і зробимо за допомогою функції Str (): sPageMin = Str (nCounter)

    А ось для визначення більшої сторінки в поточній парі потрібно від номера кінцевої сторінки відняти поточне значення лічильника і додати одиницю. Ну і звичайно, теж перетворити результат в символьний рядок за допомогою функції Str ():

    sPageMax = Str (nPageFinish - nCounter + 1)

    Крім того, необхідно прибрати зайві прогалини з символьних змінних за допомогою функції Trim (), після чого ці два рядки придбають такий вигляд:

    sPageMin = Trim (Str (nCounter)) sPageMax = Trim (Str (nPageFinish - nCounter + 1))

  2. Складемо пари сторінок для кожного друкованого розвороту так, щоб парна сторінка завжди була першою в парі, і запишемо результат в змінну sPagesPrint. Для цього використовуємо структуру розгалуження (оператор умови) If ... Then ... <Else> ... End If.

    Якщо значення лічильника nCounter - непарне число (залишок від ділення значення лічильника на два, який вираховується оператором Mod, більше нуля), то в парі сторінок першої ставиться велика за номером сторінка, якщо значення парне - менша:

    If nCounter Mod 2> 0 Then 'якщо перша непарна sPagesPrint = sPageMax + "," + sPageMin Else' якщо перша парна sPagesPrint = sPageMin + "," + sPageMax End If

  3. Останній крок у підготовці списку сторінок для друку - формування змінної, що містить всі номери сторінок для друку. Це робиться просто додаванням вже готових пар сторінок в змінну sListOfPages. Один нюанс: перед першою парою сторінок (коли значення лічильника nCounter дорівнює одиниці) кома не потрібна, тому знову використовуємо оператор умови:

If nCounter = 1 Then sListOfPages = sListOfPages + sPagesPrint Else sListOfPages = sListOfPages + "," + sPagesPrint End If

На цьому частина програми, що формує список сторінок для друку, завершена. В результаті її виконання створена символьна змінна sListOfPages, що містить наступний рядок "16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9".

Мінлива sFileNamePS (повний шлях для запису PostScript-файлу)

Мінлива sFileNamePS (повне ім'я файлу) повинна виглядати так: «C: \ _ Image \ In \ <Імя_документа> _спуск_1-16.ps».

Щоб створити її, необхідно зробити наступне:

  1. Запишемо в змінну sFileNameDOC «короткий» (без вказівки каталогу) ім'я файлу активного документа. При цьому всі символи імені будуть перетворені в рядкові (малі) літери за допомогою функції LCase (). Це перетворення хоча і не обов'язково, але бажано, тому що при великій кількості файлів в папці простіше знаходити потрібний файл, коли всі імена набрані в одному регістрі: sFileNameDOC = LCase (ActiveDocument.Name)
  2. Замінимо в «короткому» імені файлу всі крапки на знак «_» за допомогою функції Replace (). Це необхідно, щоб уникнути плутанини з визначенням місця, де закінчується файл і починається його розширення. З імені файлу можна було б видалити і саме розширення, але робити цього не варто, оскільки доводиться працювати з файлами різних типів (як * .doc, так і * .rft). А для надійної ідентифікації джерела PDF-файлу краще бачити ім'я вихідного файлу повністю, з розширенням: sFileNameDOC = Replace (sFileNameDOC, ",", "_")
  3. Доповнимо «короткий» ім'я словом «_спуск_» і діапазоном сторінок, які виводяться на друк (ці дані, як ви пам'ятаєте, ми вже розрахували в першій частині програми, створивши змінні sPageStart і sPageFinish): sFileNameDOC = sFileNameDOC + "_спуск_" + sPageStart + "-" + sPageFinish
  4. Зазначимо каталог для запису файлів друку PostScript. Це підпапка In тієї самої папки спостереження, яку ми визначили в установках Acrobat Distiller Я назвав її _Images, але можна використовувати будь-яке інше ім'я, наприклад _Output або _Watched Folder. Зверніть увагу, що імена таких папок починаються з підкреслення. Це зроблено для того, щоб наша папка спостереження перебувала на початку списку папок на диску і її не потрібно було довго шукати (а заглядати в неї доведеться часто). sDirIn = "C: \ _ Images \ In \"
  5. І нарешті, «зберемо» повне (тобто - із зазначенням каталогу) ім'я файлу для друку і запишемо його в змінну sFileNamePS. Для цього просто з'єднаємо ім'я каталогу для запису PostScript-файлу і «короткий» ім'я файлу, додавши до них розширення ".ps": sFileNamePS = sDirIn + sFileNameDOC + ".ps"

В результаті виконання цієї частини програми створена символьна змінна sFileNamePS, що містить наступний рядок: "<Імя_документа> _спуск_1-16.ps".

Ось, власне, і все. В кінцевому підсумку наша програма повинна виглядати, як в лістингу 4 .

Тепер відкрийте в Word файл, який потрібно вивести на друк, натисніть Alt-F8, знайдіть в списку макросів Спуск_полос і натисніть Виконати. PostScript-файл буде автоматично записаний в зазначений вами каталог. Якщо при цьому Acrobat Distiller активний, то PDF-файл з ім'ям <Імя_документа> _спуск_1-16.pdf. буде відразу ж створено і поміщений в підпапку Out папки спостереження.

Запускайте Adobe Acrobat, відкривайте створений PDF - і друкуйте готовий спуск смуг на будь-який принтер. Нагадаємо, що драйвер віртуального принтера Linotronic 330 можна налаштувати так, щоб відразу ж робити «дзеркальні» файли для виведення плівок на звичайному принтері.

Рекомендуємо перед друком всього документа уважно переглянути його і надрукувати на пробу парочку розворотів зі сторінками, де є графічні елементи, особливо векторні. Дуже рідко, але бувають випадки, коли при друку таких елементів навколо малюнка з'являється тонка лінія. Вирішити цю проблему можна, підібравши інший віртуальний принтер (наприклад, Agfa або CreatePDF з нового і дуже вдалого пакету Adobe PressReady).

Загалом, як і при використанні будь-якого програмного продукту в реальних (мало не сказав «бойових») умовах, необхідно експериментувати. Дуже скоро ви підберете потрібні режими і будете успішно готувати видання до друку, заощаджуючи свій час.

вместо Висновки

Представлена ​​тут програма, написана на VBA, - мінімально необхідний набір команд для успішного друку спуску смуг з Word. Насправді написана автором цієї статті програма значно більше і включає в себе також модулі контролю кількості сторінок в документі (ця кількість повинна бути кратна 4), екранні діалогові вікна для введення початкових параметрів (визначення діапазону розворотів на висновок, наприклад), налаштовані панелі інструментів для швидкого запуску макросу і т.д. Але опис всього цього зайняло б занадто багато місця, та й завдання статті, в общем-то, інша: показати колегам потенційні можливості автоматизації роботи шляхом програмування на VBA для офісних додатків.

Крім того, дана програма, якщо уважний читач помітив, призначена для друку документів з невеликою кількістю сторінок. Справа в тому, що наопашки (тобто однієї зошитом) можна друкувати видання обсягом до 80 сторінок. Більша кількість листів складно зшивати, до того ж таке видання буде виглядати незграбно і його незручно читати. Для видань з великою кількістю сторінок застосовується або збірка на термобиндер, або ніткошвейних з'єднання. Відповідно і спуск смуг в такому випадку слід робити не однієї зошитом, а декількома, в кожній з яких може бути від 4 до 32 сторінок.

Природно, автором написані відповідні програми. Однак, повторюся, їх опис зайняло б занадто багато місця. Пропоную читачам самостійно вирішити цю задачу, тим більше що принцип побудови такої програми тут вже описаний.

У наступній статті - опис прийомів корекції полів і масштабу підготовлених в Word публікацій без переверстку. Ця проблема хоча і є надзвичайно болючою для реальної практики фірм оперативної поліграфії, але цілком успішно вирішується за допомогою VBA і програми Adobe Acrobat.

КомпьюАрт 9'2002

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью