Поради тим

Зміст



Порада 1. Використовуйте аркуші книги макросів для зберігання констант


Особливість зберігання макросів в Excel полягає в тому, що всі вони записані в модулях, пов'язаних з певною робочою книгою. Навіть макроси і функції користувача, розроблені для загального застосування, прив'язані до книги PERSONAL.XLS, яка завжди незримо присутній при виклику програми. Для доступу до цієї книги досить виконати команду Окно / Відобразити … і вибрати в списку, що вікно книги Personal (зазвичай це ім'я – єдине в списку прихованих вікон). Оскільки всі сучасні макроси пишуться на VBA, то аркуші робочої книги макросів, як правило, не використовуються.


Разом з тим листи робочої книги представляють собою зручне середовище зберігання різноманітної інформації з унікальними можливостями. Так, тільки тут допускається запис символьних рядків з різною кодуванням. Наприклад, одночасно можна використовувати кирилицю, латинський і балтійський алфавіти, а також спеціальні символи. Ні в яких інших файлах, крім безпосередньо «робочої» поверхні документів Excel або Word, таке неможливе, не кажучи вже про тексти програмних модулів. Наприклад, російськомовні користувачі в країнах Балтії не можуть використовувати суміш рідного і державної мови в базах даних Access, формах Outlook, запозичених елементах управління та програмних модулях, які передбачають вказівку єдиного набору символів.


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


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


Порада 2. Використовуйте приховану форму


При роботі над проектом VBA часто виникає бажання використовувати елементи керування ActiveX загального призначення, такі як CommonDialog, таймер, MAPI, FTP та ін Найчастіше такі елементи не вдається впровадити безпосередньо в тіло офісного документа, а діалогові форми інтерфейсом розробки можуть бути не передбачені.


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


У редакторі VBE створимо нову форму і «перетягнемо» на неї необхідні елементи управління, причому такі, що навіть при відображенні форми залишаються невидимими. На рис. 1 показаний приклад подібної форми, на якій розташовані CommonDialog, Internet Transfer Control, IETimer і пара елементів MAPI.

Рис. 1. Прихована форма з «невидимими» елементами управління


Тепер у нас в проекті з'явилися додаткові об'єкти, до яких досить просто звертатися


Розглянемо роботу з прихованою формою на прикладі використання CommonDialog для відкриття і збереження текстових файлів. Напишемо користувача функцію, що повертає ім'я файлу і повний шлях, вибраний користувачем у вікні стандартного діалогу, а також True – у разі успішного завершення операції і False – якщо користувач натисне кнопку Cancel.

Function ComDlgFile(ByRef strName As String, _
                              ByRef strPath As String, _
                              strTitle As String, _
                              blnOpen As Boolean) As Boolean
“– Show Common Dialog and set FileName & FullPath
   
   Load FormHidden

   On Error Resume Next
   With FormHidden
      .CommonDialog.CancelError = True
      .CommonDialog.FileName = strName
      .CommonDialog.DialogTitle = strTitle
      .CommonDialog.Filter = _
         “All Files(*.*)/*.*/Text Files(*.txt)/*.txt”
      If blnOpen Then
         .CommonDialog.ShowOpen
      Else
         .CommonDialog.ShowSave
      End If
      If Err = 0 Then
         On Error GoTo 0
         strName = .CommonDialog.FileTitle
         strPath = .CommonDialog.FileName
         ComDlgFile = True
      Else
         ComDlgFile = False
      End If
   End With
   
   Unload FormHidden

End Function


Зверніть увагу, що всі дії виконуються з об'єктом, укладеним в контейнер FormHidden. Це не що інше, як наша прихована форма, якій присвоєно належне ім'я.


Перш ніж звертатися до об'єктів форми, її потрібно завантажити. Робиться це за допомогою інструкції Load. При роботі з «нормальною» формою в цьому місці зазвичай використовується метод Show. В кінці функції передбачено виконання інструкції Unload, звільняє пам'ять від форми та її об'єктів.


Звернення до функції може бути таким:

Sub DialogSetFile()
“– Show Common Dialog
   
   Dim strName As String
   Dim strPath As String

   strName = “”
   strPath = “”

   If ComDlgFile(strName, strPath, “Pick Up File”, True) Then
      MsgBox “Name:” & Chr(9) & strName & Chr(13) _
                & “Path:” & Chr(9) & strPath, vbExclamation
   Else
      MsgBox “Cancel By User”, vbCritical
   End If

End Sub


Використання прихованої форми дуже зручно також і для тиражування. Елементи управління не прив'язані до документів, тому всю конструкцію можна експортувати за допомогою команд Імпорт та Експорт файлу контекстного меню проекту в редакторі VBE.


Порада 3. Друкуйте на матричному принтері


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


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


Така зручність при друку має і свій зворотний бік – труднощі використання звичайних форм на основі документів Word або Excel – через відсутність режиму вибіркової друку полів введення з збереженням їх просторового розташування на сторінці. Тому часто доводиться спостерігати, що подібні документи друкуються за допомогою спеціально розроблених програм (зазвичай під DOS) або на старих добрих друкарських машинках.


Разом з тим не складає труднощів використовувати всю потужність додатків Office і в цьому випадку. Досить тільки передбачити нескладну процедуру підготовки документа до друку. Тоді робота з бланком може виглядати так, як показано на рис. 2.

Рис. 1. Прихована форма з «невидимими» елементами управління


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

 Sub PrePrint()
"- Копіювання форми та видалення елементів оформлення

   ActiveSheet.Select
   ActiveSheet.Copy
   ActiveSheet.Unprotect
   Cells.Select

"- Видаляємо заливку
   Selection.Interior.ColorIndex = xlNone

"- Видаляємо рамки
   Selection.Borders(xlDiagonalDown).LineStyle = xlNone
   Selection.Borders(xlDiagonalUp).LineStyle = xlNone
   Selection.Borders(xlEdgeLeft).LineStyle = xlNone
   Selection.Borders(xlEdgeTop).LineStyle = xlNone
   Selection.Borders(xlEdgeBottom).LineStyle = xlNone
   Selection.Borders(xlEdgeRight).LineStyle = xlNone
   Selection.Borders(xlInsideVertical).LineStyle = xlNone
   Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

"- Видаляємо графічні елементи (написи, лінії та ін)
   If ActiveSheet.Shapes.Count > 0 Then
      ActiveSheet.Shapes.SelectAll
      Selection.ShapeRange.Delete
   End If

   ActiveSheet.Range(“A1”).Select

End Sub


Єдина тонкість, яку слід враховувати, полягає в наступному: тут передбачається, що всі елементи, не призначені для друку, відрізняються від звичайного тексту. Тому текстові коментарі, заголовки і назви полів слід оформляти у вигляді графічних елементів – написів.

Порада 4. Корисний шаблон для Word


Дуже часто доводиться чути нарікання користувачів на громіздкі коди HTML-документів, які генерує Microsoft Word. Однак це можна суттєво поправити, навіть не вдаючись до спеціальних розробок. Перше, що необхідно зробити при використанні Word як інструменту для підготовки HTML-документів, це правильно підібрати шаблон. Ідея полягає в тому, щоб обмежитися тільки стандартними стилями, притаманними HTML-документу, і не перевизначати їх у Word. Тоді результуючий код не буде містити багатьох «зайвих» тегів, а належне форматування можна буде застосувати потім, за допомогою CSS (Cascading Style Sheets – каскадні таблиці стилів. – Прим.ред.)


Для виготовлення «нормального» шаблону HTML-документа достатньо мати чисту HTML-сторінку з мінімумом інформації, наприклад створити нову сторінку за допомогою FrontPage:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>FrontPage</title>
</head>

<body>
</body>
</html>


Якщо таку сторінку відкрити в Word, то список доступних стилів поповниться стандартним набором стилів HTML, так, як це показано на рис. 3.

Рис. 3. Стандартні стилі HTML-документа


Тепер залишається зберегти сторінку як шаблон документа і використовувати її завжди, коли передбачається формування документа HTML. Доцільно навіть зберегти таку сторінку як шаблон Normal, щоб звикнути до роботи зі стандартними стилями сучасних документів. Єдина неприємність полягає в наявності трьох стандартних стилів Word: Заголовок 1, 2 і 3. Оскільки ці стилі є системними, їх не можна видалити з шаблону. Залишається тільки запам'ятати, що в HTML-документі для виділення заголовків слід використовувати стилі H1-H6, а стилі Заголовок 1, Заголовок 2 та ін взагалі краще не застосовувати.


Рада 5. Автоматизуйте вставку закладок


Іноді в документах Word потрібно задавати велику кількість закладок (bookmarks), особливо якщо готується великий документ HTML, в якому закладки будуть грати роль об'єктів Anchor – елементів для організації системи перехресних посилань.


У подібних випадках використання стандартної команди Вставка / Закладка … досить складно, оскільки вимагає придумування імен, до того ж задовольняють правилами іменування подібних об'єктів.


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

 Sub SetBookmark()
"- Вставка закладки для виділеного тексту

   Dim sName As String
   sName = LCase(Trim(Selection.Text))
   If Len(sName) < 1 Then
      MsgBox “Bookmark not valid”, vbCritical
      Exit Sub
   End If
"- Заміна неприпустимих символів
   sName = ConvertName(sName)

   With ActiveDocument.Bookmarks
"- Перевірка на першу цифру, що неприпустимо
      If IsNumeric(Left(sName, 1)) Then sName = “a_” & sName
      .Add Range:=Selection.Range, Name:=sName
      .DefaultSorting = wdSortByName
      .ShowHidden = False
   End With

End Sub


У наведеному макросі над виділеним текстом виробляються деякі перетворення. По-перше, за допомогою функції ConvertName неприпустимі в імені прогалини, знаки пунктуації, спеціальні символи замінюються символом «підкреслення»:

 Private Function ConvertName(sName As String)
"- Заміна неприпустимих символів

   Dim sRes As String
   Dim sChar As String
   Dim i As Integer
   sRes = “”
   For i = 1 To Len(sName)
      sChar = Mid(sName, i, 1)
      Select Case sChar
      Case ” “, “.”, “-“, “,”, “;”, “:”, “””, “!”, “?”, “”””
         sRes = sRes & “_”
      Case Else
         sRes = sRes & sChar
      End Select
   Next
   ConvertName = sRes

End Function


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


Рада 6. Макроси для роботи зі списками


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


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


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


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


Самі по собі макроси досить прості і «програмуються» в основному за допомогою «макрорекордер». Природно, перед записом макросів необхідно рядкам-прототипам присвоїти імена діапазонів:

 Sub InsertCopy()
"- Вставка копії поточного рядка

Dim strSelAddr As String "- позиція курсору
Dim objCurRange As Range "- поточний об'єкт Range

   ActiveCell.Select
   strSelAddr = Selection.Address(ReferenceStyle:=xlR1C1, _
      RowAbsolute:=False, _
      ColumnAbsolute:=False, _
      RelativeTo:=Cells(2, 1))

"- Перевірка на допустимість операції
   If InStr(1, strSelAddr, “-“, vbTextCompare) Then
      MsgBox “This Selection Not Valid”, vbCritical
   Else
      Set objCurRange = Selection
      objCurRange.EntireRow.Select
      Selection.Copy
      Selection.Range(“A2”).Select
      Selection.Insert Shift:=xlDown
      Application.CutCopyMode = False

"- Рекомендована позиція введення
      Selection.Range(“A1”).Select
   End If

End Sub

Sub DeleteRows()
"- Видалення рядків

Dim strSelAddr As String "- позиція курсору
Dim intAns As Integer "- відповідь користувача

   Selection.Select
   strSelAddr = Selection.Address(ReferenceStyle:=xlR1C1, _
      RowAbsolute:=False, _
      ColumnAbsolute:=False, _
      RelativeTo:=Cells(2, 1))

"- Перевірка на допустимість операції
   If InStr(1, strSelAddr, “-“, vbTextCompare) Then
      MsgBox “This Selection Not Valid”, vbCritical
      Exit Sub
   End If
   intAns = MsgBox(“Delete Selection” & Chr(13) _
& "Are You Sure", vbQuestion + vbOKCancel)
   If intAns = vbOK Then Selection.EntireRow.Delete

End Sub

Sub InsertRow()
"- Вставка рядка Item

Dim strSelAddr As String "- позиція курсору
Dim objCurRange As Range "- поточний об'єкт Range
Dim strSheetName As String "- ім'я активного листа
Dim varSection As Variant "- номер розділу

   ActiveCell.Select
   strSelAddr = Selection.Address(ReferenceStyle:=xlR1C1, _
      RowAbsolute:=False, _
      ColumnAbsolute:=False, _
      RelativeTo:=Cells(1, 1))

"- Перевірка на допустимість операції
   If InStr(1, strSelAddr, “-“, vbTextCompare) Then
      MsgBox “This Selection Not Valid”, vbCritical
   Else
      strSheetName = ActiveSheet.Name
      Set objCurRange = Selection

"- Про всяк випадок копіюємо загальний зразок рядки
      Sheets(“Settings”).Range(“List1Item”).Copy

"- Копіюємо зразок рядка для поточного аркуша
      On Error Resume Next
      Sheets(“Settings”).Range(strSheetName & “Item”).Copy

      objCurRange.EntireRow.Select
      varSection = Selection.Range(“A1”).Value
      Selection.Range(“A2”).Select
      Selection.Insert Shift:=xlDown
      Application.CutCopyMode = False

"- Рекомендована позиція введення
      Selection.Range(“A1”).Select
   End If

End Sub


Єдина суттєва відмінність цих макросів від записів «макрорекордер» полягає в наявності перевірок допустимості операцій. Так, для макросів InsertCopy і DeleteRows позиція курсора при виклик не повинна знаходитися на рядку заголовків, тоді як при вставці рядків-прототипів нижче позиції курсору в макросі InsertRow – таке цілком припустимо. У наведеному прикладі передбачається, що рядок заголовків – Перша. Якщо це не так, слід відкоригувати значення параметра RelativeTo. Перевірка позиції курсору виробляється достатньо екзотичним способом: за наявності від'ємного значення відносного адреси. Але це зовсім не обов'язково – можна просто порівнювати абсолютні номери рядків.


Для підвищення надійності в макросі DeleteRows передбачений діалог для підтвердження користувачем «руйнує» операції, а в макросі InsertRow – можливість відсутності рядка прототипу для даного списку. Ця проблема вирішується шляхом вставки прототипу «за замовчуванням». Подібний прийом дозволяє мати в книзі кілька листів зі списками однакової структури, без необхідності створення для кожного з них рядка-прототипу.


Рада 7. Використовуйте різноманітні типи елементів керування Office


У довідковій документації, присвяченій панелей управління Office, увага приділяється тільки таких елементів управління, як Button і ComboBox. Разом з тим офісна колекція CommandBarControls підтримує велика кількість різноманітних елементів управління, які задаються за допомогою властивості Type.


Одним з таких маловикористовуваних елементів управління є CommandBarControl з типом msoControlEdit. Це не що інше, як аналог звичайного текстового поля TextBox, присутнього практично у всіх формах.


Поряд з цим ControlEdit дозволяє істотно урізноманітнити інтерфейс прикладної розробки. Припустимо, що розробляється програма, що передбачає вибір товару зі списку. Можна створити контекстне меню, «спливаюче» в позиції курсору, в якому за допомогою поля ControlEdit запитується кількість товару. У цьому випадку офісне меню буде виконувати функцію зручної форми введення.


Інший приклад, показаний на рис. 4, використовує поле ControlEdit для зберігання нерозподіленої суми в задачі обліку оплати за рахунками. Складність такого завдання полягає в небезпеці отримати оплату відразу по декількох рахунках, що зажадає припинення алгоритму реєстрації оплати і переміщення фокусу з форми на основний документ. Внаслідок модальності форм Office 97 таке завдання взагалі нерозв'язна. Хоча в Office 2000 ця проблема усунена після введення властивості Show Modal, що допускає втрату фокусу формою, – рішення з плаваючою панеллю управління виглядає більш витонченим.

Рис. 4. Використання панелі інструментів в якості форми


Створити таку панель можна за допомогою коду, наведеного нижче:

 Private Sub Workbook_Open()
"- Створення динамічної панелі Оплата

   Dim cbPayment As CommandBar
   Set cbPayment = Application.CommandBars _
      .Add(Name:=”Payment”, _
      Position:=msoBarFloating, _
      Temporary:=True)
   With cbPayment
      .Controls.Add Type:=msoControlButton
      .Controls(1).Caption = “Payment”
      .Controls(1).Style = msoButtonIconAndCaption
      .Controls(1).OnAction = “PaymentContinue”
      .Controls(1).FaceId = 1643
      .Controls.Add Type:=msoControlEdit
      .Controls(2).Text = “0.00”
      .Controls(2).Enabled = False
      .Visible = False
   End With

End Sub


Зверніть увагу на тип елемента керування msoControlEdit і на його основний робочий властивість Text, не описане в довідковій документації.


Рада 8. Використання Word і Excel для підготовки графічних файлів


Програми Office все частіше використовуються як інструмент для підготовки Web-сторінок. І якщо формування закінчених HTML-документів за допомогою лише Word або Excel поки ще викликає заслужені нарікання користувачів, то ніщо не заважає застосувати ці програми, для виготовлення окремих елементів, наприклад повноцінних графічних файлів.


Так, в Excel, для об'єктів Chart передбачений метод Export, що дозволяє зберігати діаграми у вигляді окремих графічних файлів:

Charts(1).Export _
   OutputFileName:=”my_chart.gif”, FilterName:=”GIF”

У Word, хоча там і немає явного методу для експорту графічних елементів, дана можливість також існує. При виконанні стандартного методу SaveAs при вказівці формату HTML всі об'єкти Shape експортуються у вигляді окремих графічних файлів, причому в Word 97 це відбувається у форматі GIF, а в Word 2000 – в JPEG. Можна скористатися цією обставиною, а непотрібний HTML-документ видалити:

 Sub ExportAllShapes()
"- Експорт всіх малюнків у вигляді графічних файлів
   Dim objShape As Shape
   Dim strActiveDocName As String
   Dim strNewDocName As String

   If ActiveDocument.Shapes.Count <= 0 Then Exit Sub
   strActiveDocName = ActiveDocument.Name
   Documents.Add
   strNewDocName = ActiveDocument.Name

"- Копіруруем всі малюнки в новий документ
   For Each objShape In Documents(strActiveDocName).Shapes
      objShape.Select
      Selection.Copy
      Documents(strNewDocName).Activate
      Selection.PasteSpecial Link:=False, _
         DataType:=wdPasteMetafilePicture, _
         Placement:=wdFloatOverText, DisplayAsIcon:=False
   Next

"- Зберігаємо новий документ у форматі HTML
   ActiveDocument.SaveAs FileName:=strNewDocName & “.htm”, _
      FileFormat:=114, LockComments:=True, _
      Password:=””, AddToRecentFiles:=False, _
      WritePassword:=””, _
      ReadOnlyRecommended:=False, _
      EmbedTrueTypeFonts:=False, _
      SaveNativePictureFormat:=False, _
      SaveFormsData:=False, SaveAsAOCELetter:=False
   ActiveWindow.Close
   Documents(strActiveDocName).Activate

"- Видаляємо непотрібний файл
   Kill strNewDocName & “.htm”

End Sub


Microsoft Office володіє багатою колекцією картинок Clipart, що зберігаються у форматі WMF. За допомогою цього нехитрого макросу, записаного «макрорекордер», можна дуже легко здійснювати «пакетне» перетворення графічних форматів для цих файлів.


Особливо слід зупинитися на графічних об'єктах WordArt. Ці об'єкти не є об'єктами типу Shape, і наведена вище процедура буде їх ігнорувати. Для того щоб використовувати ці об'єкти на Web-сторінках, достатньо перетворити об'єкти WordArt в малюнки за допомогою команд копіювання і спеціальної вставки.


Рада 9. Запишіть макрос перевизначення мови


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

Sub SetRussian()
   Dim objAll As Range
   Set objAll = Selection.Range
   objAll.WholeStory
   objAll.LanguageID = wdRussian
End Sub


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*