Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba

.pdf
Скачиваний:
11
Добавлен:
06.02.2016
Размер:
1.26 Mб
Скачать

 

 

Body

 

 

 

 

 

 

 

 

 

 

 

 

 

ccOsn

 

7

10

23

15

10

 

120

 

 

Изм Лист № докум.

Подп.

Дата

5

15

17

18

 

 

 

Разраб.

 

 

 

 

Литера

Лист

Листов

Пров.

 

 

 

 

 

 

 

 

Н. контр.

 

 

 

 

ccList

ccListov

 

 

 

 

 

 

 

 

ccRazd

ccGrupa

 

 

Утв.

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 9.1

 

 

ccGrupa – указывает место, куда вводится номер группы;

Body – указывает место, куда по завершению макроса будет помещена точка вставки. Именно здесь должен вводится текст отчета.

Установить на месте всех закладок выравнивание по центру, размер шрифта на месте закладки ccOsn – 20, а для всех остальных закладок – 10.

На этом разработка шаблона завершена.

Для сохранения разработанного шаблона выберите из меню Файл команду Сохранить как. В поле Имя файла введите имя шаблона, ФИО_Лист1 а в раскрывающемся списке Тип файла установите Шаблон документа. Щелкните на кнопке ОК, чтобы завершить команду. В результате шаблон будет сохранен в файле с именем ФИО_Лист1.dot.

7.2.Разработка пользовательского интерфейса

Для ввода текста в штамп удобно воспользоваться специальной пользовательской формой. Среда проектирования VBA предлагает вам очень удобный способ разработки собственных диалоговых окон, которые позволяют ввести текст в документ сразу в необходимом формате. Это дает возможность пользователю не заботиться о правильном положении текста в документе или, использовать переменные документа для сохранения текста. Используя различные списки, переключатели, кнопки и другие управляющие элементы пользовательских форм, можно оказывать некоторую информационную помощь пользователю.

Можно написать свою программу так, что прежде чем допустить пользователя к следующему этапу работы, будет проверяться, например, правильность введенных данных и использованных параметров. Благодаря наличию хорошо разработанных пользовательских форм, ввод данных будет происходить гораздо быстрее.

Однако прежде чем приступать к разработке форм, необходимо продумать саму форму, например, рассмотреть все виды информации, которые вам нужно получить от пользователя. Также необходимо определить, какие элементы управления процессом создания документа можно предоставить пользователю.

Разработать пользовательскую форму MemoForm1 (Рис. 9.2) для заполнения штампа, задав следующие значения свойству Name для текстовых полей: txtOsn, txtListov, txtGrupa, а для комбинированного поля – txtRazd.

Рис. 9.2

7.3.Написание VBA-программы

После разработки шаблона и формы приступают к написанию VBAпрограммы. Необходимо создать несколько процедур VBA, которые отображают и проверяют форму:

Макрос для отображения формы. В нашем шаблоне это будет процедура, которая запускается при создании нового документа.

Процедура отмены формы. Это обычная процедура для одной из командных кнопок формы.

Процедуры, которые будут обрабатывать события, происходящие при работе с формой. Эти процедуры состоят из команд инициализации формы, введения и проверки данных, обработки щелчков и т.д.

Каждый проект содержит модуль документа с именем ThisDocument, для открытия которого необходимо, дважды щелкнуть на его значке. Для каждого документа обязательно задаются три процедуры.

Document_New выполняется каждый раз при создании нового документа с заданным шаблоном.

Document_0pen выполняется каждый раз, когда открывается документ с заданным шаблоном.

Document_Close выполняется перед тем, как документ с заданным шаблоном будет закрыт.

Создайте процедуру в модуле документа ThisDocument, которая будет выполняться при создании нового документа на основе шаблона

Лист1.dot.

Private Sub Document_New() 'Отображение формы на экране

MemoForm1.Show 'Выбор закладки ccOsn

ActiveDocument.Bookmarks("ccOsn").Select

'Перенос данных из соответствующего окна 'пользовательской формы в документ

Selection.TypeText Text:=MemoForm1.txtOsn.Text ActiveDocument.Bookmarks("ccGrupa").Select Selection.TypeText Text:=MemoForm1.txtGrupa.Text

ActiveDocument.Bookmarks("ccRazd").Select Selection.TypeText Text:=MemoForm1.CboRazd.Text

ActiveDocument.Bookmarks("ccListov").Select Selection.TypeText Text:=MemoForm1.txtListov.Text

'Выбор закладки ccList и вставка поля PAGE ActiveDocument.Bookmarks("ccList").Select

Selection.Fields.Add Range:=Selection.Range, Type:= _ wdFieldEmpty, Text:= "PAGE \* Arabic ", _ PreserveFormatting:=True

'Переход на закладку для начала ввода информации

ActiveDocument.Bookmarks("Body").Select End Sub

Для ячейки таблицы «Лист» удобно использовать поле MS Word Page, которое вставляет номер текущей страницы. Для переключения между отображением результата кодов полей и отображением самих кодов нажмите комбинацию Alt+F9, чтобы включить отображение кодов полей нажмите Alt+F9 еще раз.

Все время, пока форма находится на экране, должна работать определенная VBA-процедура, чтобы выполнять действия по обработке происходящих в форме событий. Процедуры, обрабатывающие данные события, генерируются в VBA автоматически во время создания формы и ее управляющих элементов. И тогда все, что вам остается сделать, – это написать код для всех действий, которые вы хотите связать с определенными событиями.

Процедура Activate выполняется каждый раз при загрузке формы. Этой процедурой обычно пользуются для выполнения любых предварительных действий, которые должны произойти перед тем, как допустить пользователя к работе с формой. Метод AddItem поля со списком вызывается три раза для описания данных из раскрывающегося списка «Вид схемы». Свойство Text для текстовых полей устанавливает начальное, пустое значение.

Private Sub UserForm_Activate() Me.CboRazd.Clear

Me.CboRazd.AddItem "Схема структурная", 0

Me.CboRazd.AddItem "Схема электрическая функциональная",1 Me.CboRazd.AddItem "Схема электрическая принципиальная",2

Me.txtOsn.Text = "" Me.txtListov.Text = "" Me.txtGrupa.Text = ""

End Sub

Написать в модуле формы следующий программный код, который выполняется при нажатии на клавишу Выход, расположенную в форме.

Private Sub cmdExit_Click() Dim cmdExit As Integer cmdExit = True

If Len(Me.txtOsn.Text)=0 Then cmdExit = False If Len(Me.CboRazd.Text)=0 Then cmdExit = False If Len(Me.txtListov.Text)=0 Then cmdExit = False If Len(Me.txtGrupa.Text)=0 Then cmdExit = False

If cmdExit = True Then Me.Hide

Else

MsgBox "Введите информацию во все поля формы",_ 48, "Ошибка ввода данных"

End If

End Sub

Процедура начинается с объявления целочисленной переменной cmdExit с начальным значением True. Далее функция Len проверяет длину введенных строк в полях формы. Если хотя бы одно из полей будет пустым, то на экран выводится сообщение, предупреждающее пользователя, что необходимо заполнить форму до конца.

На этом процесс создания шаблона завершен. Сохраните измененный шаблон Лист1.dot. Выйдите из MS Word. Загрузив снова MS Word, создайте новый документ на основе своего шаблона Лист1.dot и проверьте его работу.

Лист1.dot а в раскрывающемся списке Тип файла установите Шаблон документа. Щелкните на кнопке ОК, чтобы завершить команду.

10. АВТОМАТИЗАЦИЯ ПРОЕКТОВ С ПОМОЩЬЮ VBA и

MS Excel

При помощи MS Excel можно решить множество разнообразных задач. Использование средств VBA, позволяет дополнительно создавать максимально удобный и гибкий интерфейс, приспособленный для решения конкретной задачи, предусматривать средства защиты от несанкционированных действий, а также автоматизировать процесс создания электронных таблиц с помощью написания и использования собственных макрокоманд.

10.1. Создание макроса в среде MS Excel

Написать макрокоманду, создающую рабочую таблицу, в которой рассчитывается налог и итоговая цена товара. Рабочая таблица содержит ячейку ввода и две вычисляемые ячейки вывода. В ячейку ввода необходимо ввести стоимость товара, а в ячейках вывода будут отображены налог

ицена. Для этого выполните следующие действия:

1)Открыть новую рабочую книгу в среде MS Excel.

2)Выбрать команду Сервис→Запись макроса;

3)В поле Имя макроса ввести Макрос1;

4)Щелкнуть в ячейке С6 и ввести Стоимость;

5)Щелкнуть в ячейке С7 и ввести Налог;

6)Щелкнуть в ячейке С8 и ввести Всего;

7)Щелкнуть в ячейке D6 и ввести 12,43;

8)Щелкнуть в ячейке D7 и ввести =D6*0,0825;

9)Щелкнуть в ячейке D8 и ввести =D6+D7;

10)Выделить ячейки D6:D8, выбрать команду Формат Ячейки. Выбрать Денежный формат «р.», 2 знака после запятой;

11)Щелкнуть в ячейке D7, выбрать команду Формат Ячейки→Граница. Щелкнуть в поле Сверху и затем – на кнопке ОК;

12)Остановить запись макроса.

13)Запустить макрос на исполнение, в результате в среде MS Excel создается таблица (Рис. 10.1), содержащая следующие ячейки.

Стоимость

12,30р.

Налог

10,15р.

Всего

22,45р.

Рис. 10.1.

Текст только что записанного макроса имеет следующий вид:

Sub Макрос1() Range("C6").Select

ActiveCell.FormulaR1C1 = "Стоимость" Range("C7").Select ActiveCell.FormulaR1C1 = "Налог"

Range("C8").Select ActiveCell.FormulaR1C1 = "Всего"

Range("D6").Select ActiveCell.FormulaR1C1 = "12.43"

Range("D7").Select ActiveCell.FormulaR1C1 = "=R[-1]C*0.825"

Range("D8").Select

ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C" Range("D6:D8").Select

Selection.NumberFormat = "#,##0.00$" Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone

With Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic End With

End Sub

Если сопоставить текст программы с только что сделанными шагами, то можно увидеть, что каждый шаг записан в одной или двух строках кода программы (процедуры). В процедуре записано также много дополнительных строк: в них устанавливаются параметры, которые не задавались явно во время создания рабочего листа. Эти дополнительные строки появляются в момент щелчка на кнопке ОК в диалоговом окне, в котором устанавливаются какие-либо параметры. Хотя можно изменить только один параметр, но для каждого параметра диалогового окна в записываемом макросе появится соответствующая строка. Например, хотя в диалоговом окне Рамка устанавливалась только опцию Снизу, в процедуру

вставлено восемь строк кода, устанавливающих значения для всех остальных параметров. В большинстве случаев удаление этих лишних строк никак не повлияет на выполнение процедуры.

За заголовком процедуры следует 12 операторов, которые последовательно выделяют каждую ячейку в интервале C6:D8 и вставляют в эти ячейки текст или формулу. Четыре последних оператора из них записывают в ячейки формулы. В них используется система адресации ячеек R1C1, а не прямая ссылка на эту ячейку. Система адресации R1C1 означает строку (Row) и столбец (Colomn), соответствующие активной ячейке.

10.2. Оптимизция макроса

При написании той же самой процедуры вручную программный код можно существенно сократить. Скопировать макрос через буфер обмена и отредактировать его следующим образом:

Sub Макрос2() Range("C6")="Стоимость" Range("C7")="Налог" Range("C8")="Всего" Range("D6")= "12.43"

Range("D7")= "=R[-1]C*0.825"

Range("D8")="=R[-2]C+R[-1]C"

Range("D6:D8") = "#,##0.00$"

Range("D8").Select

With Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic End With

End Sub

Проверить работу отредактированного макроса Макрос2.

10.3. Автоматизация создания электронных таблиц

Создать в MS Excel программу для построения графика функции y=xk. Результаты работы программы приведены на Рис. 10.2.

Рис. 10.2.

1)Объединить ячейки A1 и B1 и вписать в полученную ячейку слова «Исходные данные».

2)Выделить ячейки А3:В24, выбрать в контекстном меню команду Формат ячеек→Граница и задать внешние и внутренние границы для выбранных ячеек.

3)Заполнить ячейки, в соответствии с таблицей 10.1.

Таблица 10.1.

Ячейка

A2

B2

D1

D2

D3

E1

E2

E3

Значение

x

y

Степень(k)

Min(x)

Шаг изменения х

2

-10

1

4)Добавить в программу с помощью панели Элементы

управления три командные кнопки в режиме конструктора и через контекстное меню назначить им следующие значения свойств Name и Caption, указанные в таблице 10.2.

 

 

 

Таблица 10.2

 

 

 

 

Свойство

Кнопка 1

Кнопка 2

Кнопка 3

 

 

 

 

Name

CommandButton1

CommandButton2

Diagram

Caption

Очистить

Заполнить

Построить

 

таблицу

таблицу

диаграмму

5) Выполнить двойной щелчок на клавише CommandButton1, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CommandButton1. Внутри процедуры необходимо дописать следующий код:

Private Sub CommandButton1_Click() Range("A3:B24).ClearContents ActiveSheet.ChartObjects.Delete

End Sub

Записанная процедура очищает ячейки таблицы в диапазоне ячеек A3:B24 и удаляет диаграмму ChartObjects из рабочего листа.

6) Выполнить двойной щелчок на клавише CommandButton2, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объекта CommandButton2. Внутри процедуры необходимо дописать код, с помощью которого происходит заполнение соответствующих ячеек таблицы в диапазоне ячеек A3:B24.

Private Sub CommandButton2_Click() X = Range("E2").Value

k = Range("E1").Value For i = 3 To 24

Cells(i, 1).Value = X

Cells(i, 2).Value = X^k

X = X+Range("E3").Value Next i

End Sub

7) Выполнить двойной щелчок на клавише Diagram и дописать следующий код, в результате откроется окно редактора кода, в котором будет помещена заготовка для процедуры обработки события Click объ-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]