Поради тим, хто програмує в Microsoft Office, Книги та статті, Різне, статті

Зміст



Порада 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>

*

*