Таблицы в VBA
Введение:
Вэтой статье мы будем создавать программукоторая будет вставлять в документ Wordтаблицу. Ты конечно же скажешь: --Зачем мне нужна эта программа, если естьстандартная, ничем не хуже этой?, и будешькак всегда не прав. Ведь из этой статьи ты не только пополнишь знания в VBA, но и научишьсяписать и применять на практике ActiveXкомпоненты.
Еслиты совсем не знаком с программированием наVBA, то можешь прочитать мою статью "ИспользованиеUserForm в VBA". В ней дается краткоеописание языка, проводится параллель междуVBA и VB, их сходства и различия.
СозданиеActiveX компонента
Ура!!!Настала пора писать свой ActiveX компонент.Писать его мы будем на VisualBasic"e. И так,начнем. Запускаем Бейсик, перед вами появляется окно New Project, выбираем в нем"ActiveX Control". Перед вами должна появитсятакая форма:
Она похожа на обычнуюформу у которой свойство BorderStyle = 0 - None. Нуладно, идем дальше. Кидаем сюда текстовоеполе, свойство Text = 1, свойство Locked = True (чтобынельзя было ввести текст в это текстовоеполе). Нижеего ставим две кнопки. Свойство Caption 1 кнопки= "<", свойство Caption 2 кнопки = ">". Подгоняем размер User Control"a под наши кнопки итекстовое поле. Теперь надопереименовать наш проект и User Control .Дадим имя проекту Mein, UserContol"y"Spin". Ваш ActiveX долженвыглядеть примерно так:
Насталовремя писать программный код. Для началаобъявим переменную в разделе глобальныхобъявлений ActiveX контрола (это послестроки Option Explicit).
Public Number
После того как мы ее объявили переходим ксобытию Initialize User Control"a, и вводим тудаследующий код:
Private Sub UserControl_Initialize()
Number = 1
End Sub
Здесьмы присваиваем переменной Number значение1. Теперь переходим к событию Click первойкнопки и вводим туда такой код:
Private Sub Command1_Click()
If Number > 1 Then
Number = Number - 1
Text1.Text = Number
End If
End Sub
Принажатии на нее мы проверяем переменную Number,если она больше 1 вычитаем из нее 1, втекстовое поле вставляем значение этойпеременной. В событие Click второй кнопкивставляем код:
Private Sub Command2_Click()
If Number < 100 Then
Number = Number + 1
Text1.Text = Number
End If
End Sub
Онаналогичен коду первой кнопки, только здесьвсе наоборот , переменная проверяется, еслиона меньше ста к ее значению прибавляетсяпо 1 при каждом нажатии второй кнопки. Как вызаметили диапазон цифр в текстовом поле от 1до 100.
Все,с созданием ActiveX закончено, осталось толькооткомпилировать его в ОСХ файл. Для этогозаходим File нажимаем на Make Mein.ocx,выбираем для этого подходящую директорию инажимаем OK.
VisualBasic при компиляции регистрирует OCX"сы всистеме, поэтому этот файл будетавтоматически добавлен в список ActiveX"овпрограмм пакета MS Office. А чтобы использоватьего в проектах VisualBasic"a придется нажать Project> Components > Browse... , открыть папку в которойнаходится нужный OCX и кликнуть по нему 2раза.
Созданиепрограммы для WORD"A
Насталовремя писать программу для Word"a. И так, запустим MsWord, после того как он откроетсяжмем Alt + F11 (или Сервис > Макрос > РедакторVisual Basic). Создаем новую форму (Insert > UserForm илина аналогичный значок в инструментах).Присваиваем ей имя (свойство Name) frmTables,выставляем свойство Сaption = "Созданиетаблицы" Теперь нам надо извлечь нашранее написанный ActiveX компонент и поместитьна нашу форму. Для этого в окне Toolbox на какой ни будьиз вкладок (обычно это вкладка Controls)нажимаем правой кнопкой мыши и выбираемAdditional Controls..., перед вами должно открытьсяокно со всеми зарегистрированными всистеме ActiveX компонентами, в нем выбираем нашОСХ"сик (если вы все сделали как написановыше он должен называться Mein.Spin) и жмемкнопку OK. После этого в окне Toolbox долженпоявиться новый инструмент, и выглядеть ондолжен так(я его выделил красным цветом):
Кидаемдва таких инструмента на нашу форму, одинпод другим, слева от них ставим лейблы, вверхней метке свойство Caption = "Числостолбцов", в нижней "Число строк".Ниже всего этого ставим две кнопки, уверхней свойство Name = cmdNewTables, свойство Caption = "Создать таблицу", у нижнейсоответственно Name = "cmdCancel", Caption = "Отмена". С права можно поместить лейблс описанием программы. У вас должнополучится примерно так:
Синтерфейсом программы разобрались, а это,поверь мне читатель, совсем не мало.Приступаем к завершающей стадии нашейстатьи, пишем программный код нашейпрограммы. Он совсем не сложный благодарятому что мы используем ActiveX компоненты. Итак, начнем, перед этим слегка закатимрукава, так на всякий случай, чтобы немешали :))). Кликаем два раза по кнопке cmdNewTables и вносим туда такой код:
Private Sub cmdNewTables_Click()
Dim myrange
Set myrange = ActiveDocument.range(0, 0)
Selection.Tables.Add range:=myrange, NumRows:=Spin2.Number,_ NumColumns:=Spin1.Number
Selection.Collapse Direction:=wdCollapseEnd
Unload Me "выгружае наше окно
End Sub
Ондостаточно прост и я не буду заострятьвнимание на каждой строке программы (еслиты что-то не понятно можешь посмотретьсправку, в ней все подробно описано), а лишьобъясню подключение нашего ActiveX компонента,вернее двух его экземпляров.
Дляэтого еще раз всмотритесь в строку Selection.Tables.Addrange:=myrange, NumRows:=Spin2.Number, NumColumns:=Spin1.Number.Вспомните переменную Number которую мыобъявляли в области глобальных объявленийнашего ActiveX компонента. Когда мывставляем таблицу в документ намнеобходимо указать количество строк (NumRows) иколичество столбцов (NumColumns) в создаваемойтаблице, для этого мы использовали значениепеременной Number. Теперь напишем кодкнопки cmdCancel, он очень прост:
Private Sub cmdCancel_Click()
Unload Me "выгрузить это окно
End Sub
Осталсяпоследний штрих - вынести нашу программу напанель инструментов MS Word"а. Для этогосоздаем новый модуль(он создаетсяаналогично форме, даем ему имя modTables. Ивписываем в него следующий код:
SubmodTablesCount()
frmTables.Show
EndSub
Послечего закрываем редактор VBA и переходим вокно Word"a. Заходим в Сервис>Настройка>переходим в раздел "Команды" в окне "Категории"находим "Макросы" и в окне "Команды"находим (если вы все сделали как былонаписано выше) Normal.modTables.modTablesCount . Щелкаем поэтой надписи и не отпуская левой кнопкимыши тащим ее на удобную для вас панельинструментов и отпускаем. Получившуюсякнопку можно отредактировать, поменять вней надпись, использовать картинку. Дляэтого достаточно нажать правую кнопку мыши,над нашей кнопкой, главное чтобы при этойоперации было открыто окно "Настройка"иначе ничего не получится.
Послередактирования кнопки закрываем окно "Настройка"и жмем по новой кнопке. Если все сделалиправильно, должно открыться окно которое мыделали выше...
Все.В этой статье мы научились писать ActiveXкомпоненты, вставлять таблицу в документWord"а. Свои пожелания, замечания и прочее,шлите мне на мыло ashdan87@mail.ru, не забывайте посещать мой сайт: www.worldvb.narod.ru, также меня можно найти в ICQ: 347384533.
Спасибочто прочитали мою статью!!! :))).
Автор:Даниелян Ашот
г.Пятигорск 25 июля 2003г.