Изработване и оптимизиране на макроси за Word по
поръчка. За контакти 0888456121
МАКРОСИ ЗА WORD
Флагманът на текстообработката MS Wordсе изучава в три нива:
1. За начинаещи
2. За напреднали
3. За експерти
Нивото "За начинаещи" е с продължителност 20 учебни часа. Разглеждат се интерфейсът /менюта, ленти с
бутони, контекстни менюта, горещи клавиши и др./, настройки за работа с програмата, промяна на интерфейса според потребностите на
потребителя, форматиране на текст, параграфи. Работа с матрици, маски. Отпечатване на циркулярни писма. Работа и оформяне на
секции. Колонтитули горен и долен. Отпечатване на номера на страниците.
Нивото "За напреднали" е с продължителност 20 учебни часа. То включва материалът от нивото "За
начинаещи" и методи за автоматизация на Word. В това ниво се решават много практически задачи с различна
степен на сложност. Като пример може да ни послужи темата "Вариации с таблици".
В крайните етапи се достига до създаване на проекти със средна сложност на основата на Visual basic for application.
Нивото "За експерти" е предназначено за курсисти, които са експерти в своята обаст на работа и имат
задоволителни и добри познания и практически умения за работа с MS Word. В това ниво се разработват
конкретни матрици, макроси и програмен код, манипулиращ обектите на Word така че, дейността на обучаемите
да се автоматизира максимално. Продължителността на нивото е различна и зависи от конкретните потребности на всеки един курсист. В
това ниво се демонстрират готови приложения на основа на Word, Excel, напр. "Генератор на тестове",
"Програма за попълване на бланки", "Програма за бързо въвеждане на специализирана медицинска информация при провеждане на
инструментални изследвания" и др. От друга страна същността на тези курсове е да подготви курсистите да решават проблеми, които не
са изучавали.
По-долу са представени условията на някои задачи, които се изучават в курсовете за напреднали и експерти.
Бързам да отправя следната препоръка към всички, които искат да използват максимално възможностите на WORD
- един великолепен продукт на Microsoft, който малко се познава. Дали Вие го познавате? Вижте
задачите и ще разберете. Препоръката е да използвате оригиналната английска версия на WORD. Така ще можете
да използвате VBA и да създавате великолепни макроси.
Задача/Макрос 347 Word,
36, 21.01.2010 14:36
Да се направи така, че при активиране на командата
File/Save активният файл да не се записва, а да се
извършва нещо друго, напр. да се появява MsgBox с бележка
"Hello!"
Задача/Макрос 346 Word,
20, 30, 21.01.2010
16:45:10
В таблица на Word
има последователно маркирани клетки. Във всяка една от тях да се добавят числата
1, 2, 3 и т.н. Да има възможност да се укаже началното число.
1
1
2
3
4
5
2
3
4
5
1
2
3
1
6
4
5
6
2
7
7
8
9
3
8
10
11
12
4
9
13
14
15
16
17
18
19
20
21
22
Задача/Макрос 310
Word, 16.12.2008 15:14:22 Да си представим, че разполагаме с таблица, в която има колонка
с градове. Имената на градовете се повтарят иса примерно ПЛОВДИВ, ВАРНА, БУРГАС,
АСЕНОВГРАД, СОФИЯ. Необходимо ни е при щракане с десния бутон на мишката в
клетка от тази таблица да получим в контекстното меню сортиран списък на имената
на градовете. Естествено без повторенията. Ако в хода на работата въведем нов
град, напр. ДОБРИЧ, то името да се появява в контекстното меню. При щракане с
мишката върху името на града, то да се въвежда в клетката на таблицата.
Задача/Макрос 295
Word, 07.05.2008
00:34:11
Стойността на променлива да се записва в
Clipboard. По този начин тя ще може да се залепя в текста, както
и в кое да е друго приложение с командата Paste.
Задача/Макрос 291
Word, 06.05.2008
18:24:40
Във файл, който е записан чрез макроса Find_All_jpg_on_c_d_1 от Задача 290
съществуват към 15000 файла, които заемат към 450 страници. Необходимо е от
списъка да се изтрият всички файлове, чийто път не започва с D:\photos
тъй като по принцип ценните снимки се записват на D
диска в папки, които започват с photos.
Задача/Макрос 290
Word, 06.05.2008
17:40:21 В текущия документ да се създаде списък от пълната файлова
спецификация /дисково устройство, път, име на файл/ на всички *.jpg
файлове, които се намират на дискове C: и
D:
C:\Documents and Settings\All Users\Application Data\Macromedia\Flash
8\en\Configuration\HelpPanel\Help\UsingComponents\images\000_titlea.jpg
C:\Documents and Settings\All Users\Application
Data\Macromedia\Flash
8\en\Configuration\HelpPanel\Help\UsingHelp\images\000_titlepagea.jpg
C:\Documents and Settings\All Users\Application
Data\Macromedia\Flash
8\en\Configuration\HelpPanel\Help\GettingStarted\images\000_titlepagec.jpg
C:\Documents and Settings\All Users\Application
Data\Macromedia\Flash
8\en\Configuration\HelpPanel\Help\UsingFlash\images\000_titlepagee.jpg
C:\Documents and Settings\All Users\Application
Data\Macromedia\Flash
8\en\Configuration\HelpPanel\Help\LearningActionScript\images\000_titlepageg.jpg
Задача/Макрос 288
Word, 24.03.2008 12:31:07 С клавишната
комбинация Ctrl-] маркираният текст може да се увеличава.
С клавишната комбинация Ctrl-[
маркираният текст може да се намалява.
От менюто Format/Character spacing разстоянието между буквите на маркирания
текст може да се намалява/увеличава. Да се създадат два макроса, които съответно
да увеличават/намаляват разстоянието между маркираните букви с 1 pt.
Макросите да бъдат достъпни от менюто Help,
от собствена лента за бутони, с
горещи клавиши Ctrl+{, Ctrl+} или
Ctrl+Shift+[, Ctrl+Shift+]
Задача/Макрос 277
Word, 15.03.2008 08:14:13 В произволен текст с N
параграфи, някои от тях съдържат името Варна в произволна позиция. Всички
параграфи, които съдържат думата Варна да се оцветят в червен цвят. Този макрос е особено полезен при разглеждане на променени
наредби и закони. В тях се среща често нещо от вида “Изм. - ДВ, бр. 46 от
2008”. Тогава ще се оцветят с червен цвят само параграфите,
които съдържат този стринг.
Може да се направи вариант в който да се
оцветяват и параграфите, които съдържат думата ВАРНА или варна.
Кодът може да бъде интегриран с подходяща
форма с едно поле, където да се запише стрингът, при наличието на който
параграфът ще се оцвети, както и друго поле, където може да се посочи в какъв
цвят да се оцвети параграфът, съдържащ указания стринг.
По-добър вариант е кодът да се стартира с
бутон при което да се оцветят в червено само параграфите, които съдържат
маркирания текст.
Задача/Макрос 265 Word, 11.08.2007 03:11:25 Имаме да попълваме голяма таблица с няколко колони. Текстът в първата колона е на кирилица,
във втората и в третата на латиница, в четвъртата отново на кирилица. Да се направи така, че при преминаване в
съответните колони кирилицата и латиницата да се превключват автоматично
Задача/Макрос 264 Word, 11.08.2007 03:10:20 При отваряне на някои документи искаме клавиатурата автоматично да се превключва на
латиница, а при отваряне на други – на кирилица
Задача/Макрос 262 Word, 10.08.2007 00:53:36 Търсенето на текст във Word
има едно голямо ограничение. Не е възможно да се използва Търсене на ТЕКСТ1 или ТЕКСТ2. Да се направи форма с две полета в които
да се въвежда ТЕКСТ1 и ТЕКСТ2 за търсене.
Задача/Макрос 254 Word, 23.07.2007 17:58:36 В менюто File съществува списък с последно използваните файлове. Този списък има следните
недостатъци. 1. Броят на файловете в списъка не може да бъде повече от 9; 2. Ако имената на файловете са по-дълги, те не могат да
се видят целите поради ограничената ширина на менюто; 3. Не могат да се изтриват отделни имена на файлове, а само всички. Да се
създаде форма RECENT FILES, която да е достъпна от менюто File. В списъка на
формата да се съхраняват имената на всички отваряни файлове.При двойно
щракане върху името, файлът да се отваря. При щракане върху бутона SHOW MY FILES се отваря друг списък с
файлове. Вторият списък се попълва чрез бутона ADD TO MY FILE LIST. По този начин можем да си създадем
списък с често използвани файлове. Естествено, те могат да бъдат отваряни от втория списък както и списъкът може да бъде
манипулиран подобно на списъка RECENT FILES.
Задача/Макрос 240 Word, 09.02.2007 16:39:10,20,
10 Всеки параграф в голям документ, който започва с "Press ENTER" да се изтрие
Задача/Макрос 239 Word, 07.02.2007, 22:05, 20,
10 Всяко циркулярно писмо да се запише като отделен документ с име Dxxxxxxx.doc
в папка D:\proba_s
Задача/Макрос 236 Word, 14.01.2007 14:32:58 Да се запише копие на активния файл, без да се променят неговото име и път, както става при записване с командата
File/Save As. В менюто File да се постави ред Save Copy As, който да
активира макроса.
Задача/Макрос 218 Word, 19.10.2006, 23:47,
24, 10 Във Word
има много контекстни менюта. Да се направи така, че името на всяко едно от тях да се появи на първия му ред.
Задача/Макрос 217 Word, 19.10.2006, 23:47, 12,
5 В документ на Word да се отпечатат имената на всички контекстни менюта
Drop Caps
Endnotes
Fields
Display Fields
Field Display List Numbers
Form Fields
Footnotes
Frames
Headings
Linked Headings
Script Anchor Popup
Lists
Inline Picture
Inline Canvas
Horizontal Line Popup
Tables
Table Cells
Table Headings
Table Lists
Table Pictures
Table Text
Whole Table
Linked Table
Text
Linked Text
Font Popup
Font Paragraph
Format Inspector Popup in Normal Mode
Format Inspector Popup in Compare Mode
Spelling
Grammar
Grammar (2)
Format consistency
Background Proofing Status Bar
Track Changes
Frame Properties
Hyperlink Context Menu
AutoSignature Popup
Field AutoText
Document Map
Shapes
Curve
Curve Node
Curve Segment
Floating Picture
Canvas Popup
OLE Object
ActiveX Control
WordArt Context Menu
Rotate Mode
Comment
Organization Chart Popup
Diagram
Connector
Track Changes Indicator
Chinese Translation
Address Block Popup
Greeting Line Popup
Inline ActiveX Control
System
Задача/Макрос 214 Word, 19.10.2006, 23:15, 12,
5
Да се създаде процедура, която да отпечатва всички символи от шрифта Wingdings
в документ на Word.
Задача/Макрос 211 Word, 12.06.2006, 19:28, 6,
5
При стартиране на Word да се появява форма с
текст.
Задача/Макрос 210 Word, 12.06.2006, 18:50, 24,
10
Добре известно е, че в менюто File има списък с последно използваните 0-9 документа. Това прави отварянето им лесно. Този списък
има два проблема. Първият е, че в него не се вижда името на папката на съответния файл. Вторият е, че ако големината на името е
повече от тридесетина символа, то последните букви са заменени с многоточие от което нищо не се разбира.
Представете си, че последните три файла с които сте работили имат следните спецификации: D:\tutorials\tutorials_word\Zadachi_za_rabota_s_word_i_avtomatisazija_na_programata1.doc,
D:\tutorials1\tutorials_word\Zadachi_za_rabota_s_word_i_avtomatisazija_na_programata1.doc C:\Zadachi_za_rabota_s_word_i_avtomatisazija_na_programata2.doc В менюто File
трите файла ще изглеждат приблизително така:
D:\...\Zadachi_za_rabota_s_word_i_avtomatisazija......
D:\...\Zadachi_za_rabota_s_word_i_avtomatisazija...... C:\...\Zadachi_za_rabota_s_word_i_avtomatisazija...... Почти няма признак, който да показва, че файловете са различни
Да се направи така, че при стартиране на Word да се появява форма, която да съдържа списък с
последно използваните файлове. В списъка да са отразени пълната файлова спецификация на документите, т.е. да няма многоточия в
имената
Задача/Макрос 209 Word, 12.06.2006, 18:35, 24,
10
При стартиране на Word да се отваря форма
съдържаща списък на последно използваните файлове.Щракането
върху линия на списъка отваря файла.
Задача/Макрос 208 Word, 12.06.2006, 19:40, 6,
5
При отваряне на документа курсорът да се позиционира там, където е извършвана последната редакция
Задача/Макрос 202 Word, 10.06.2006, 22:57, 24,
5
На първия ред на всички контекстни менюта на Word
да се добави ред с името на менюто.
Задача/Макрос 200 Word, 10.06.2006, 00:46, 24,
5
В контекстното меню, което се появява при щракане с десния бутон на мишката да се появява ред, който да съдържа номера
на реда върху който е щракнато.
Задача/Макрос 199 Word, 10.06.2006, 00:30, 16,
5 В контекстното меню, което се появява при щракане с десния бутон на мишката да се
появява команден ред, натискането на който да отваря MsgBox в който да се вижда номерът на реда върху който е щракнато.
Задача/Макрос 192 Word
Тази задача е истински бисер. Заслужено може да бъде заведена в рубриката "Ако знаех, че това е възможно!"
Първата таблица на документа се състои от N реда и 1 колона.
Всяка промяна на текста в клетките на първата таблица на документа, добавянето и изтриването на редове, водят до промяна на
контекстното меню, което се появява при щракане с десния бутон на мишката върху текст като съдържанието на клетките се появява
като командни редове в менюто. Щракането върху тези редове води до появяване на текста в документа. По този начин изключително лесно можем да въвеждаме повтарящи се текстове в документа. При това динамичната
промяна на контекстното меню съответно на броя редове и съдържанието на клетките на първата таблица в документа, превръща тази
иначе досадна дейност (най-често се осъществява с Copy/Paste) в истинско
удоволствие. Microsoft тук получават поредното БРАВО!
Задача/Макрос 191 Word Към контекстното меню TEXT,
което излиза при щракане с десния бутон на мишката върху страницата на WORD да се прибавят 3 командни реда – PROBA1, PROBA2, PROBA3.
Да излиза в MsgBox различен текст при натискане на
всеки един от тях.
Да излиза в MsgBox caption на всеки един от
бутоните
Caption на всеки един от бутоните да се въвежда в текста.
Това е най-ценната възможност защото позволява лесно въвеждане в текст на често повтарящи
се думи и изрази.
Задача/Макрос 188 Word При отваряне на документа текстовете, описани в таблица с N реда и 1 колона в началото на документа да се
появяват в контекстното меню, което се появява при щракане с ДБМ върху текст. Активирането на командата от контекстното меню да
въвежда текста от клетката в документа.
Задача/Макрос 187 Word Забраняване на контекстни менюта
Sub disable1()
CommandBars("Text").Enabled = False
End Sub
Sub disable2()
CommandBars("Lists").Enabled = False
End Sub
Sub disable3()
CommandBars("Table text").Enabled = False
End Sub
Задача/Макрос 186 Word Прихващане на събитието EditCopy
Събитието EditCopy настъпва при копиране на избран текст и други обекти в клипборда. Прихващането му е полезно, когато
текстът, който трябва да се копира е необходимо да претърпи предварителна подготовка преди да бъде залепен в друг документ на
Word и още повече в друга програма. Ако залепянето
е в документ на Word, то текстът може да бъде
обработен при настъпване на събитието EditPaste,
но ако залепяме текста в друга програма, то единственият начин за обработка е при копирането му в клипборда. Така например
залепянето на текстови параграфи на Word в FrontPage и в други програми за HTML редакция води до появяване на нежелано разстояние
след края на всеки параграф. Това разстояние може да се избегне, ако се прихване събитието EditCopy и знаците за край на параграф на маркирания
текст се сменят със знаци за Manual Line Break.
Така обработеният текст се залепя във Front Page и
нежеланото разстояние след края на параграфите не се появява. След смяната на знаците за край на параграф с Manual Line Breaks и копиране на маркирания текст в
клипборда е възможно да се възстанови първоначалното състояние на текста чрез UnDo.
Командата не променя съдържанието на clipboard.
Sub CopyToFrontPage1()
'
' CopyToFrontPage1 Macro
' Macro recorded 28.05.2006 by Miroslav Balchev
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "^l"
.Forward = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Copy
ActiveDocument.Undo
End Sub
Задача/Макрос 185 Word Прихващане на събитието Paste Често се налага да въвеждаме данни, които малко се отличават от вече въведени данни.
Например пишейки ръководство със задачи за всяка Задача/Макрос има данни в следния формат:
Задача/Макрос 183 Word Съществува форма с бутон. Натискането на бутона да добавя процедура в модула
ThisDocument
при стартирането на която да се активира MsgBox “Hello!”. При всяко следващо отваряне на документа да се
активира MsgBox "Hello!"
Задача/Макрос 181 Word Често се налага да отпечатваме фактури. Те съдържат номера. При промяна на номера да се
променя автоматично и името на файла, което да съдържа нововъведения номер. На илюстрацията червените цифри /номерът на фактурата/
са маркирани с bookmark наречен nomer. Прихваща се събитието FileSave и стойността на nomer се придава на параметъра .Name на диалога wdDialogFileSaveAs. Последният се визуализира чрез метода .Show. В резултат на това се получава долната картина. Така, чрез промяна на текста на
документа променяме името на файла. Добре се вижда, че полето File name на диалога Save As
съдържа червените цифри от текста като част от името.
Задача/Макрос 180
Word Стандартно във Word е възможно е да се разлиства /browse/ по полета, endnote,
footnote, comments, sections, pages, edits, headings, pictures, tables. 99 % от потребителите на
Word разлистват само по страници. Съвсем малко
знаят, че може да се разлиства и по Bookmarks, Last Find. Повтарянето на последното разлистване става или чрез
Ctrl-PgDn и Ctrl-PgUp или чрез инструмента Select Browse Object.
Задача/Макрос 179Word Задаването на коментари към част от текста води до тяхното отпечатване. Ако желаем
коментарите да се виждат само на екрана, но да не се отпечатват, то е необходимо да форматираме текста им като Hidden при визуализирани служебни знаци.
Задача/Макрос 178
Word Вместо
File Save да се извърши нещо друго.
Задача/Макрос 158 Word,
8 В един документ на Word има N секции. Във всяка секция има различен
брой параграфи. Всяка секция N представлява раздел от изпитен конспект. Всеки параграф представлява
въпрос. Параграфите са номерирани в конспекта последователно. Няма два параграфа с еднакви номера. Да се направи форма в която
натискането на бутон "ИЗБЕРЕТЕ БИЛЕТ" да генерира изпитен билет, в който да бъдат включени въпроси по случаен принцип от всяка
една разрешена секция.
Задача/Макрос 110 Word Ако имаме една книга с разкази и заглавието на всеки разказ е форматирано с
Heading1, то да се направи така, че разказите в нея да се сортират по азбучен ред на заглавията.
Ще се извърши сортиране на заглавията, представени в режим View/Outline.
Задача/Макрос 105 Word Съществува модул с име Module2. Съществува форма с бутон. Натискането на
бутона да добавя процедура при стартирането на която да се активира MsgBox
“Hello!”
Задача/Макрос
90 Word Пълната файлова спецификация да се записва в документ
Задача/Макрос 89
Word Имената на файловете от определена папка да се
записват в документ
Задача/Макрос 88
Word Имената на файловете от определена папка да се
показват в MSG BOX
Задача/Макрос
86 Word Да се създаде файл и да се добави ред в него
Задача/Макрос
85 Word Да се направи проверка за съществуване на папка
Задача/Макрос
84 Word Съществува форма с текстово поле и един бутон. Натискането на бутона
да доведе до създаване на нова папка с име, посочено в текстовото поле.
Задача/Макрос
81 Word Съществуват N еднотипни документи в една
папка в които съществуват параграфи, които започват с Име:, Презиме:,
Фамилия:, ЕГН: Да се направи форма, която да съдържа етикети Име:,
Презиме:, Фамилия:, ЕГН: и съответни на етикетите полета. На формата да има
бутони NEXT, PREV,
FIRST, LAST които съответно
да показват в полетата стойностите на Име:, Презиме, Фамилия, ЕГН: съответно от
следващия, от предишния, от първия, от последния документ.
Задача/Макрос 80
Word Съществуват N еднотипни документи /бланки,
досиета/ в една папка. На всяка една бланка съществува параграф, който започва с
Име: и по-нататък следва името. Документите са много. Да се направи макрос,
който последователно да обработва всички документи от папката и да изведе списък
от всички имена в нов документ.
Задача/Макрос
55 Word Съществува документ в който текста е подреден така:
Worksheet
Menu Bar Worksheet Menu
Bar True
Chart Menu
Bar
Chart Menu Bar
False
Standard
Standard True
Formatting
Formatting True
PivotTable
PivotTable False
Chart
Chart False
Reviewing
Reviewing False
Forms
Forms False
Stop
Recording
Stop Recording
False
Да се създаде макрос, който да
преобразува текста в таблица с три колонки, която да изглежда така:
Worksheet Menu Bar
Worksheet Menu Bar
True
Chart Menu Bar
Chart Menu Bar
False
Standard
Standard
True
Formatting
Formatting
True
PivotTable
PivotTable
False
Chart
Chart
False
Reviewing
Reviewing
False
Forms
Forms
False
Stop Recording
Stop Recording
False
Задача/Макрос
53 Word В един документ на Word има текст, който е
в параграфи. Освен това между параграфите с текст съществуват много празни
параграфи, като количеството им между отделните параграфи с текст е различно. Да
се направи така, че празните параграфи в документа да се премахнат. Това може да
стане само чрез Find при включена опция
Use Wildcards, като се приложи
Special / Num Occurences
Задача/Макрос 51
Word Да се промени контекстното меню на Word,
което излиза при щракане с десния бутон на мишката върху маркиран текст. Най –
отгоре да има ред, щракането върху който да прави маркирания текст да става
Bold.
Задача/Макрос 40
Word От документа да се премахнат всички празни параграфи.
Това е досаден пропуск на командата
Find/Replace. Където не е възможно да се използва ^p
да се приложи ^13
Задача/Макрос 39
Word Да се
направи форма, в която да има 5 командни бутона.
1.
Кликването върху първия бутон да показва текста на текущия параграф в
MsgBox
2.
Кликването върху втория бутон да показва броя на символите в текущия параграф.
MsgBox
Selection.Paragraphs(1).Range.Characters.Count
3. Кликването върху
третия бутон да избира параграфа, ако е празен.
If
Selection.Paragraphs(1).Range.Characters.Count = 1 Then
Selection.Paragraphs(1).Range.Select
End If
4.
Кликването върху четвъртия бутон да избира параграфа, ако не е празен.
If
Selection.Paragraphs(1).Range.Characters.Count >
1 Then
Selection.Paragraphs(1).Range.Select
End If
5.
Кликването върху петия бутон да затваря формата
Задача/Макрос 38
Word Понякога се налага в текста да се въвеждат символи, които нормално
не могат или се въвеждат трудно от клавиатурата. Въвеждането им става с
Insert/Symbol. Да се направи форма, върху която
да бъдат поставени бутони с изобразени върху тях символите, които ще е
необходимо да въвеждаме. При щракане върху бутона в текста да се въвежда символа
от caption. Примери за такива символи са Ä, ä, Ö, ö,
Ü, ü от немския език и Ë, ë от руския. Как работи формата може да се види чрез
натискане на бутона INSERT_SYMBOL.
Да се обърне особено внимание на UserForm Layout
събитието. То се активира когато се мести формата.
Application.Activate не
позволява фокусът да остане върху формата и позволява безпроблемно да се пише
текст.
Задача/Макрос 23
Word Съществуват много документи с еднакво съдържание, които се различават
единствено по имената, адресите и управителите на фирмите или други подобни
данни. Тези данни се повтарят многократно в един и същ документ.
Да се направи така, че при отваряне на нов документ на базата на
template FIRMA.DOT
да се отваря форма с три текстови полета, в която да могат да се въвеждат
името, адреса и управителя на фирмата. След натискане на бутон
OK стойностите от полетата да се записват в документа съответно на
местата ХХХ, ААА, УУУ.
Матрицата да създава документ от три страници. На първата страница най-отгоре да
е записано:
Фирма ХХХ с адрес ААА и управител УУУ
На втора страница да е записано:
Противопожарно досие на фирма ХХХ с адрес ААА и управител УУУ
На трета страница да е записано:
Протокол за охрана на фирма ХХХ с адрес ААА и управител УУУ
Задача/Макрос 22
Word При нанасяне на промени в документ PC не ни
оставя да излезем без да кажем дали искаме или не искаме да съхраним направените
промени.
Съобщението е Do You want to save changes, което
означава Искате ли да запазите промените?
Да се направи така, че вместо стандартното съобщение, посочено по – горе да
излиза съобщение на български език:
В ДОКУМЕНТА ИМА НАПРАВЕНИ ПРОМЕНИ. ИСКАТЕ ЛИ ДА ГИ ЗАПАЗИТЕ?
Да има възможност да се съгласим с бутон ДА. Да има възможност да се откажем с
бутон ОТКАЗ.
Да има възможност да затворим документа без да съхраняваме промените с бутон НЕ.
Задача/Макрос 21
Word При нанасяне на промени в документ PC не ни
оставя да излезем без да кажем дали искаме или не искаме да съхраним направените
промени.
Съобщението е Do You want to save changes, което
означава Искате ли да запазите промените?
Да се направи така, че машината да запазва промените при излизане винаги без да
ни пита.
Задача/Макрос 20
Word Да се направи документ, в който да е записано:
ТОЗИ
ДОКУМЕНТ СЕ ОТВАРЯ ЗА XXX ПЪТ.
На мястото на XXX да излиза число, което да се
увеличава с единица при всяко отваряне на документа.
Задача/Макрос 9 Word Да се направи така, че всеки нов документ, който отваряте във
Word да има написано автоматично пълното си име във
Header. Така се улеснява по-късното намиране на документа.
Указания: Новите документи се създават на базата на
normal.dot
Това е матрица /template/. Ако в
Header на normal.dot
се запише полето FileName, то всички нови
файлове базирани на матрицата
Normal.dot ще съдържат тази информация.
Бъгове и
решения
Проблем 1:
Word cannot find its data source /Solution of the problem with VBA/
Това е бъг на иначе отлична текстообработваща програма. Става
въпрос за Microsoft Word 2002, който е съставна част на
Office XP. Съобщението се появява тогава, когато пишем
Form Letters /циркулярни писма/. При това базовото ни писмо е на
Word, а документът с данни е таблица на Excel.
Бъгът сработва изключително стабилно когато включим филтриране на данните. По
този начин усилията ни да напишем писма до всички хора от списъка, които са на
възраст под 30 години стават безпредметни. Също така не можем да напишем писма
до хората, при които остават определени дни до настъпване на някакъв срок, напр.
1
2
3
Име
Срок за изпълнение
Дни напред за предупреждение
Иван
21.03.2005
15
Стоян
30.01.2006
30
Петър
15.06.2005
7
Георги
18.09.2005
5
Ако е необходимо, напр. да разпечатаме писма до
всички хора от по-горния списък, до крайния срок на които /посочен в колона 2/
остават по-малко дни отколкото посочените в колона 3, то Office XP
не е подходящ инструмент.
Решение 1 на проблема Word cannot find its
data source:
Ако работата Ви изисква да пишете циркулярни писма
инсталирайте си вместо Office XP
по-ранна версия и проблемът Ви ще бъде решен. Можете да ползвате Office
2000, а дори и Office 97.
В заключение. Ще се надяваме в някои от бъдещите версии на
този прекрасен по замисъл продукт, Word,
този проблем да бъде отстранен. От направената справка в
интернет се вижда, че много хора имат този проблем, но решение не е посочено.
Остава ни притеснението, че ще се появи някакъв друг бъг и нещо, което до скоро
е работило добре, в новата версия ще създава проблеми.
Решение 2 на проблема Word cannot find its data
source:
Най-после измислих нещо по въпроса. Мисля, че е важно, защото
надеждата ми, че в Office 2003
той е отстранен също не беше се оправдала. Решението е чрез код,
написан на VBA - Visual basic for application. Тук ще
представя само описание на решението, а програмен код ще напиша по-късно.
Какви са основните симптоми на проблема Word cannot
find its data source
1. Независимо по какъв начин се установява връзката между
базовото писмо на Word и таблицата с данни на
Excel съобщението Word cannot find its data sourceсе появява винаги, когато се включи Advanced filter,
базовото писмо на Word
се запише и след това се отвори отново.
2. Проблемът Word cannot find its data source
не се появява, когато е включен обикновен филтър.
3. След появяване на съобщението Word cannot find
its data sourceпри повторно отваряне на базовото писмо на Word
и съответно посочване на data source
/съответния файл на Excel/ Advanced filter
винаги е изключен, което налага неговото повторно въвеждане.
След като анализирах тези симптоми предлагам
следното решение:
При затваряне на документа на Word
събитието Document_Close /настъпва при затваряне на
документа/ генерира код за събитието Document_Open /настъпва
при отваряне на документа/в който се записват
стойностите на текущия Advanced filter. След като запише
процедура за изключване на Advanced filter в събитието
Document_Open,
събитието Document_Close изключва текущия Advanced
filter. Ако не го изключим, то ще имаме проблем Word
cannot find its data sourceпри
отваряне на документа на
Word.
При отваряне на базовото писмо в което Advanced filter
е изключен, връзката с таблицата на Excel се установява
без въпросното съобщение Word cannot find its data source.
Настъпва събитието Document_open, което включва
съхранения от Document_Close Advanced filter.
Много пъти съм търсил решение на проблема Word
cannot find its data sourceна страницата на Microsoft
http://support.microsoft.com/wd2002mailmerge,
но не съм намерил нещо повече, освен стандартното описание на техниките за
работа с Mail merge.
Ако имате решение на проблема Word cannot find its
data sourceи желаете да го споделите с нас, моля пишете ни!
Проблем 2: Много специфичен проблем, който не позволява волности
като например тези: При затваряне на документ на
Word да се програмира какво да стане, когато този
документ се отвори. Или пък какво да става, когато се отварят нови документи на
Word или Excel. Кога би могло да бъде
полезно това.
Например тогава, когато искаме да включим при отваряне на
документа филтриране, което е било активно при затваряне на документа. Или пък
нещо по-просто за разбиране. При затваряне на документа да се запомня в колко
часа това е направено и на коя дата. След това при отваряне на документа да
излиза диалогов прозорец, в който да е написано, кога е бил затворен последно
този документ. Или пък колко пъти този документ е бил затварян и на кои дати и в
колко часа. Или пък кога и колко е работено с документа.
Проблемът е предизвикан от командата Find,
която е от Add-ins
модела на VBA. В интернет може да се види какви
неприятности причинява когато се търси по Find Method (VBA Add-In
Object Model)
Какви са симптомите: По принцип командата Find,
без да навлизам в синтаксиса, се използва за да се намери едно нещо в друго
нещо. Ако първото се намери във второто, то се връща резултат TRUE /истина/,
а ако не се намери - FALSE /лъжа/. Проблемът е там, че в
тази си редакция FIND
винаги връща TRUE.
Решение 1. Вместо Find може да
се използва функцията InStr, която също така открива
наличието на един стринг в друг. Дори тя е по-информативна. Дава ни информация и
за мястото, където е намерен търсения стринг.
Аз лично се натъкнах на проблема Find Method (VBA
Add-In Object Model), когато исках да генерирам програмно
код в модула ThisDocument и ThisWorkbook
на документи на Word и Excel. При
генериране на кода за събитието Document_Open
не може да имаме повече от едно негово появяване в модула. Така,
процедурата, която генерира кода за
Document_Open първо проверява в модула ThisDocument
дали такава процедура съществува. Ако не съществува - създава я и записва кода в
нея. Ако съществува - добавя съответните програмни редове в края или началото
или намира нужното място, където да добави новите програмни редове.
Проблем 3: При сканиране на съдържанието на учебник реших да
вмъкна и сканирани изображения на корицата на учебника чрез
Insert/Picture/From Scanner or camera. Изненадата ми беше
голяма, когато получих изображение високо едва няколко милиметра. След
неколкократни опита реших да сканирам изображенията във *.jpg
файлове и след това да ги вмъкна в документа на Word чрез
Insert/Picture/From File. Резултатът беше същия. Изображенията
се виждаха прекрасно с ACD See, но отново в текстовия
документ се появяваха само няколко сантиметра от долната им част. Отворих нов
документ. Вмъкването в него беше без проблеми. Така разбрах, че причината за
проблемното вмъкване на картинка във файл е сканираният документ. Разгледах
внимателно параграфите, където вмъквам. Установих, че при сканирането и
последващата обработка на текста с ABBYY Fine Reader 7.0 Professional
параграфите са с включена опция Line Spacing Exactly.
Изключих опцията. Вмъкването се нормализира.
Проблем 4: При добавяне на Toolbar към
Normal.dot той не може да бъде изтрит. Може само да се скрива.
Това създава предпоставки за добавяне на няколко ленти с инструменти с едно и
също име. И ако наистина пробвате да създадете една лента от диалога
Customize/Toolbars, в случая Proba123
и след това се опитате да я изтриете, то при всяко следващо
стартиране лентата ще си съществува. Изтриването на лента от Normal.dot
не се регистрира от Word като промяна на нормалната
матрица. Това си личи особено добре, ако сте включили опцията Prompt to
save Normal template което означава, че
Word ще Ви пита дали иската да съхраните промените в
Normal.dot, ако има такива. След изтриване на лента с
инструменти от Normal.dot и затваряне на редактора
Word не Ви пита нищо, т.е. в нормалната матрица няма промяна.
Изтриването на лента с инструменти не се записва.
Два са начините за решаване на този проблем.
1. Да се използва диалогът Organizer
за ръчно изтриване на лентата с инструменти
2. Да се използва VBA /Visual basic for application
В заключение ще кажа, че описаните по-горе проблеми и решения
не са програмиране в истинския смисъл на думата, а по-скоро резултат на
познаване на обектите, методите, събитията, качествата на DOM
на съответните програми.
Ако във Вашата работа сте се сблъскали с подобни и други
проблеми можете да ми пишете.