Д-р Мирослав Балчев (Медаров)
гр. Пловдив
Word разполага с няколко механизма за бързо въвеждане на повтарящ се текст. Целта на настоящото изложение не е да обучава потребителите да ги ползва, а само информативно ги изброявам: това са бабешкият метод Cut/Copy PasteOffice Clipboard, AutoText, AutoCorrect (те си имат своите прелести). Ако тези начини не са ви съвсем известни, допитайте се до всяко едно ръководство "for Dummies", "step by step" или аналогично, където те са основна тема за размисъл. и неговият внук
Искам да ви покажа нещо по-различно, нещо което ще повиши вашата производителност и ще намали отрицателните ви чувства към вашия най-добър/лош приятел в зависимост от гледната точка – персоналния компютър.
Кое налага да измислим нов метод. Да си представим следната ситуация. Имате да обработвате текст, в който на различни места се повтарят имена на градове – Тервел, Пловдив, Царево, Варна, София, Русе, Бургас, Габрово. Аз лично вече загубих всякакво желание да създавам автоматични текстове или списъци за автоматична корекция, които да ми помагат да въвеждам по-бързо имената на въпросните градове. Нищо не ни пречи, обаче малко да помечтаем и след това да опитаме да реализираме мечтите си. Представете си, че написвате името на града, щракате с десния бутон на мишката върху него и от контекстното меню избирате командата „Добави към менюто“. Активирането на последната команда да включва думата в която е курсора в контекстното меню.
По-надолу в текста при нужда да въведете вече включената в контекстното меню дума, просто щракате с десния бутон на мишката и от контектното меню избирате включената в него вече дума и тя се въвежда в документа.
Естествено трябва да се предвиди и механизъм за изтриване на думи от контекстното меню. Най-лесно това може да стане, когато курсорът е в думата delete. Тогава щракането върху вече включена дума в контекстното меню ще доведе до нейното изтриване.
Да пристъпим към реализацията на проекта си.
1. Добавяне на командния ред "Добави към менюто" в контекстното меню.
Стартираме VBA редактора чрез Alt-F11 и щракаме два пъти върху ThisDocument на Project. В дясно е Code пространството. Там въвеждаме:
Dim myBlankbtn As CommandBarControl
Private Sub Document_Open()
CustomizationContext = ActiveDocument
CommandBars("Text").Reset
Set myBlankbtn = CommandBars("Text").Controls.Add(Before:=1)
myBlankbtn.Caption = "Добави към менюто"
myBlankbtn.OnAction = "add_to_menu"
myBlankbtn.BeginGroup = True
End Sub
2. Създаване на код, който да се активира при щракане върху Добави към менюто. Като резултат, думата в която е курсора да се добавя най-горе в менюто.
Създаваме нов програмен модул от менюто Insert/Module на VBA редактора и в него записваме:
Sub add_to_menu()
Set myBlankbtn = CommandBars("Text").Controls.Add(Before:=1)
myBlankbtn.Caption = Selection.Words(1)
myBlankbtn.OnAction = "which"
End Sub
Public Sub which()
Selection.TypeText CommandBars.ActionControl.Caption
End Sub
3. За да изтрием добавена дума от контекстното меню, което се появява при щракане с десния бутон на мишката върху текст, влизаме в създадения в т. 2 програмен модул и променяме функцията which по следния начин:
Public Sub which()
If Selection.Words(1) = "delete " or Selection.Words(1) = "delete" Then
CommandBars.ActionControl.Visible = False
Else
Selection.TypeText CommandBars.ActionControl.Caption
End If
End Sub
След създаването на по-горния код ще имаме като резултат поставената за цел в началото на документа ни функционалност. Ако затворим и отново отворим файла ще забележим, че след отварянето добавените думи в контекстното меню в предишната сесия вече не се появяват. Това налага една допълнителна довършителна промяна на кода и тя е:
4. По-долният код се въвежда в раздела ThisDocument на проекта на VBA в редактора на мястото на създадения преди това.
Dim myBlankbtn As CommandBarControl
Dim mk As CommandBarControl
Private Sub Document_Open()
For Each mk In CommandBars("Text").Controls
'MsgBox mk.Caption & " " & Len(mk.Caption)
If mk.Caption = "Добави към менюто" Then
flag = 1
End If
Next
If flag = 1 Then
Else
Set myBlankbtn = CommandBars("Text").Controls.Add(Before:=1)
myBlankbtn.Caption = "Добави към менюто"
myBlankbtn.OnAction = "add_to_menu"
myBlankbtn.BeginGroup = True
End If
End Sub
С това нашата основна задача, формулирана в началото на документа е завършена. Това ни дава основа за бъдещи доработки и реализиране на фантазии, като включване в контекстното меню на команда "Сортирай добавените думи", възможност въведените думи в контекстното меню да се използват във всички документи, въвеждане на нови думи в менюто с горещ клавиш, да не се въвеждат еднакви думи в менюто, например два пъти Пловдив, в менюто да може да се въвеждат селектираните думи и др., но за това някой друг път. Всъщност за да бъде възможно въвеждането на думите от контекстното меню във всички нови документи е необходимо съвсем малко – добавяне на 2 програмни реда – единият в Document_Open, а вторият в Sub add_to_menu. Това е CustomizationContext = NormalTemplate. Опитайте. Работи перфектно. Разбира се трябва да се погрижим за наличието на Sub add_to_menu в Normal.dot. Това лесно може да стане при отворен VB редактор чрез копиране. Ако не копираме този код в Normal.dot няма да е възможно да добавяме думи от кой да е документ към менюто. Всъщност без да навлизам в подробности, принципно е възможно да имаме един и същ списък от думи в контекстните менюта "Text" във всички документи плюс индивидуални списъци от думи за всеки документ. Но дали е целесъобразно в момента не мога да кажа.
И накрая, ако не всичко ви е ясно, и дори ако нищо не ви е ясно, както казват, вината не е във вашия телевизор.
Източник: IDG.BG