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

Автоматизация процесса создания офисных документов. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Диапазон ячеек С3:D12 отводим для формирования нового списка из элементов списка товаров. Ячейки E3:E12 (поле Количество) отводим для ввода значений вручную, а значения в ячейках F3:F12 (поле Сумма) будут вычисляться по формулам.
Шаг 4. Выведем на экран панель инструментов Формы с помощью кнопки
Вставить. Вставим в бланк документа элемент управления Поле со списком.
Далее следует задать свойства элемента управления Поле со списком, щелкнув правой кнопкой мыши на элементе управления, вызвав контекстное меню и активизировав опцию Формат объекта…, появится окно Формат эле­мента управления, представленное на рисунке 7.14.
Рис. 7.14. Окно Формат элемента управления
Для задания параметра Формировать список по диапазону (рис. 7.14) нужно установить курсор в соответствующее этому параметру поле, активизи­ровать лист Товары и выделить ячейки B2:B11, в которых записаны наимено­вания товаров. Для задания параметра Связать с ячейкой следует установить курсор в соответствующее этому параметру поле и щелкнуть на любой ячейке листа Накладная за границами бланка, например Н1. После задания параметров для завершения процесса щелкнуть на кнопке ОК.
На рисунке 7.15. показано, как при выборе первой записи в списке товаров в ячейке Н1 появляется единица.
61
Рис. 7.15. Задание свойств элемента управления Поле со списком
Шаг 5. На этом шаге предстоит создать инструмент для вывода выбранной записи из хранимого списка товаров в ячейки листа Накладная.
Определим функции ПРОСМОТР в ячейках Н2 и I2. Очевидно, что в качестве искомого значения функции ПРОСМОТР всегда будет выступать значение ячейки Н1, в которую передается элементом управления номер выбранной записи в списке Товары.
В ячейку Н2 вставим функцию ПРОСМОТР, возвращающую значение поля Модель (рисунок 7.16).
Рис. 7.16. Задание аргументов функции ПРОСМОТР
В ячейку I2 вставим функцию ПРОСМОТР, возвращающую значение поля Цена по аналогии с функцией ПРОСМОТР, определенной в ячейке Н2.
На рисунке 7.17 показано действие функций ПРОСМОТР при выборе первого по списку товара.
Рис. 7.17. Задание аргументов функции ПРОСМОТР
62
Шаг 6. Создадим макрос для формирования первой записи нового списка. Для этого достаточно, чтобы макрос копировал значение ячейки Н2 и вставлял бы в C3, а значение ячейки I2 вставлял бы в D3.
Если связать элемент управления Поле со списком с этим макросом, то каждый раз, как только с помощью элемента управления будет выбран новый товар, макрос будет запускаться.
Выполним команду Запись макроса и проделаем вручную все те действия, которые хотели бы получить от макроса и остановим запись. Не следует забывать, что в ячейки C3 и D3 следует копировать значения с помощью специальной вставки.
В результате предыдущих действий получим следующий код.
Sub Макрос1()
Range("H2").Select
Selection.Copy
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
Range("I2").Select
Application.CutCopyMode = False
Selection.Copy
Range("D3").Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
End Sub
Эта же задача может быть решена проще, если написать вручную код, присваивающий ячейкам C3 и D3 значения ячеек H2 и I2.
Назовем новую процедуру Копирование(). Она будет делать то же самое, что и процедура Макрос1().
Sub Копирование() Range("C3").Value= Range("H2").Value
Range("D3").Value= Range("I2").Value
End Sub
Или, еще проще
Sub Копирование()
Range("C3")= Range("H2")
Range("D3")= Range("I2")
End Sub
63
Для запуска макроса свяжем его с элементом управления Поле со спис­ком. Для этого щелкнем правой кнопкой мыши на элементе управления Поле со списком и из контекстного меню выберем команду Назначить макрос, а в от­крывшемся окне выберем макрос Копирование(). Испытаем действие макроса. Результат показан на рисунке 7.18.
Рис. 5.18. Результат действия макроса Копирование()
Доработаем макрос таким образом, чтобы можно было вставлять записи, следующие за первой записью.
Шаг 7. Создадим макрос для формирования последующих записей нового списка. Для этого воспользуемся свойством Offset (смещения) объекта Range. Так, например, процедура
Sub Копирование()
Range("C3").Offset(1, 0) = Range("H2")
Range("D3")= Range("I2")
End Sub
будет копировать значение ячейки Н2 не в ячейку С3, а в ячейку С4.
Для того чтобы автоматически вставлять новые записи формируемого списка в незанятые ячейки выбранного диапазона, необходимо осуществить последовательную проверку значений ячеек, начиная с ячейки С3 до ячейки С12 на наличие в проверяемой ячейке пустой строки. В первую, попавшуюся по ходу проверки пустую ячейку столбца С нужно вставить значение из ячейки Н2, а соседнюю ячейку справа вставить значение из ячейки I2.
Так как документ Накладная вмещает максимум 10 записей, то, чтобы проверить ячейки с С3 до С12, необходимо организовать цикл с переменной цикла, принимающей десять значений с шагом равным 1.
Например, следующая процедура Цикл1() будет записывать слово «Товар» последовательно в ячейки, начиная с ячейки С3 и заканчивая ячейкой С12,
Sub Цикл1()
For i = 0 To 9
Range("C3").Offset(i, 0) = "Товар"
Next i
End Sub
64
а процедура Цикл2() добавит число 999р. последовательно в ячейки, начиная с ячейки D3 и заканчивая ячейкой D12 (ячейки D3:D12 отформатированы в денежном формате).
Sub Цикл2()
For i = 0 To 9
Range("C3").Offset(i, 0) = "Товар"
Range("C3").Offset(i, 1) = 999
Next i
End Sub
Ниже приводится иллюстрация работы процедуры Цикл2(), представлен­ная на рисунке 7.19
Рис. 7.19. Результат действия процедуры Цикл2()
Шаг 8. Перейдем к задаче проверки значения ячейки. Запишем код, отвечающий следующему условию:
«Если значение проверяемой ячейки, например, ячейки C3 равно пустой строке, ей присваивается значение ячейки Н2».
If Range("C3") = "" Then
Range("C3") = Range("H2")
End If
Чтобы проверить все ячейки некоторого диапазона, их следует проверять в цикле. Модифицируем процедуру Копирование().
Sub Копирование() For i = 0 To 9 If Range("C3").Offset(i, 0) = "" Then Range("C3").Offset(i, 0) = Range("H2") Range("C3").Offset(i, 1) = Range("I2")
65
Exit For End If Next i End Sub
В этой процедуре, после того как вставляется новая запись в формируемый список, работа цикла For должна быть прекращена. Это достигается помещением команды Exit For (выход из цикла) в конце условного выражения If . . . Then.
Итак, в результате проведенных действий получена модифицированная процедура Копирование(), решающая поставленную выше задачу.
Данную процедуру можно применять для автоматизации многих подобных документов. При этом требуется весьма незначительный объем редактирования кода этой процедуры.
7.5 Элемент управления Календарь
Рассмотрим еще один элемент управления Календарь. Применение этого элемента бывает очень полезно для автоматизации офисных документов, когда приходится неоднократно вставлять различные даты.
Чтобы установить элемент управления Календарь на листе рабочей книги, необходимо осуществить следующие действия:
на ленте Разработчик нажмем на кнопке Вставить;
на открывшейся панели ActiveX щелкнем на кнопке Другие элементы
управления ;
из раскрывшегося списка выберем строку Элемент управления
Календарь 12.0 или другую версию этого элемента;
перенесем указатель мыши (теперь в форме крестика) в точку на рабочем листе, где должен находиться левый верхний угол вставляемого элемента управления и щелкнем левой кнопкой мыши;
используя маркеры, распределенные по периметру выделенного элемента управления, установим левой кнопкой мыши требуемые размеры элемента.
Элемент управления Календарь представлен на рисунке 7.20.
66
Рис. 7.20. Элемент управления Календарь
Для задания свойств элемента управления Календарь необходимо
выполнить следующие действия:
щелкнуть на кнопке Режим конструктора панели Элементы управления;
выделить элемент управления Календарь щелчком левой кнопки мыши;
щелкнуть на кнопке Свойства панели Элементы управления;
в открывшемся окне свойств Properties элемента управления Календарь (рисунок 7.21) присвоить свойству LinkedCell адрес ячейки, в которую нужно
вставлять дату (в данном случае свойству LinkedCell присвоен адрес ячейки А1).
Теперь, для того чтобы перевести элемент управления Календарь в ак­тивный режим, достаточно отжать кнопку Режим конструктора на панели Элементы управления.
Рис. 7.21. Окно свойств Properties элемента управления Календарь
67
Элемент управления Календарь вставляет дату в ячейку в текстовом формате и, следовательно, для этой ячейки нельзя использовать формат Дата. Однако можно найти выход из этого положения, если использовать передаваемое значение элемента управления Календарь в качестве аргумента функции ЗНАЧЕН(). Данная функция вставляется в ту ячейку, в которой должна быть определена дата в нужном формате, а ячейка, связанная с элементом управления Календарь, может быть размещена в любом месте любого листа рабочей книги.
Элемент управления Календарь вставляет дату в связанную с ним ячейку. Чтобы вставить дату в любую выделенную ячейку листа, требуется создание специального макроса. Покажем, как это делается.
Макрос, обеспечивающий вставку даты в произвольную выделенную ячейку листа рабочей книги, очевидно, должен выполнять следующие действия:
1. Запоминать адрес выделенной ячейки, записывая его в созданную для
этого переменную. Если, например, выбрать для переменной имя Адрес, то ука­занное действие может выполнить инструкция Адрес = Active-
Cell.Address.
2. Присвоить ячейке с адресом Адрес значение ячейки, связанной с эле-
ментом управления Календарь или, если используется функция ЗНАЧЕН() для преобразования типа данных, значение ячейки, в которой определена функция ЗНАЧЕН(). Указанное действие может выполнить инструкция
Range(Адрес).Value = Range("A1").Value
где "A1"– адрес ячейки, связанной с элементом управления Календарь
или в которой определена функция ЗНАЧЕН().
Полностью код макроса может выглядеть так:
Public Sub ВставкаДаты()
Адрес = ActiveCell.Address
Range(Адрес).Value = Range("A1").Value
End Sub
Для запуска созданного макроса можно установить на листе рабочей книги элемент управления Кнопка и связать этот элемент с макросом. Однако, более удобно для запуска макроса использовать другое событие – щелчок на элементе управления Календарь. Чтобы это сделать необходимы следующие действия:
1. Щелкнем на кнопке Режим конструктора панели Элементы управления.
2. Сделаем двойной щелчок на элементе управления Календарь левой
кнопкой мыши. Этим действием будет создан модуль элемента управления Ка­лендарь, показанный на рисунке 7.22.
68
Рис. 7.22. Программный модуль элемента управления Календарь
3. Запишем в качестве программного кода созданного модуля две ин-
струкции разработанного макроса.
После выполнения этих действий можно испытать работоспособность программного модуля элемента управления Календарь.
Таким образом, в целях повышения уровня автоматизации создания офисных документов, весьма продуктивным является совместное использование преимуществ макрорекордера и доработка полученных макросов с использованием редактора (операторов) VBA.
7.6 Задания для самопроверки
1. Разработать программу в VBA, с применением элементов управления,
для перевода угла (angleD) из градусной меры в радианную, используя формулу <рад>= <град>*π/180. Программу разработать в MS Excel, с использованием ячеек A2, B2 и кнопок управления «Расчет» (CommandButton1), «Очистить» (CommandButton2), «Очистить все» (CommandButton3). Программный код мо­жет выглядеть следующим образом:
Private Sub CommandButton1_Click() Dim angleD As Currency Dim angleR As Currency pi As Double=3.141592654 angleD = Range("A2").Value angleR=angleD *pi/180 Range("B2").Value = angleR End Sub
Private Sub CommandButton2_Click() Range("A2").Value = "" Range("B2").Value = "" End Sub
69
Private Sub CommandButton3_Click() Range("A2").Clear Range("B2").Clear EndSub
Написать пояснения к программному коду. Ответить на вопрос: в чем со­стоит отличие действия кнопок «Очистить» и «Очистить все».
2. Разработать программу в VBA, для перевода угла (angleD) из радиан­ной меры в градусную, используя формулу <рад>= <град>*π/180. Программу разработать в MS Excel, с использованием ячеек A2, B2 и кнопок управления
«Расчет» (CommandButton1), «Очистить» (CommandButton2), «Очистить все» (CommandButton3).
Написать пояснения к программному коду.
3. Рассчитать, какое количество информации можно получить после реа-
лизации четырех событий. Вероятность каждого события составляет 0,25. Для расчета использовать табличный процессор MS Excel и встроенный язык про­граммирования VBA. Значения вероятностей разместить в ячейках А1, В1, С1, D1, результат разместить в ячейке E1. Операция по расчету количества инфор­мации должна начать выполняться после «клика» мышью по кнопке «Расчет».
Написать пояснения к программному коду.
4. Создать в VBA пользовательскую форму «Текст», представленную на рисунке 7.22. Для создания формы использовать текстовый процессор MS
Word. Для создания пользовательской формы выполнить команды: Разработчик – Visual Basic – Insert – UserForm
Программный код, для активизации формы «Текст», может выглядеть
следующим образом:
Рис. 7.22. Пользовательская форма «Текст»
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]