Number
|
Возвращает код
ошибки
|
Source
|
Имя текущего
проекта
|
Description
|
Возвращает
строковое выражение, содержащее текст сообщения
|
HelpFile
|
Полное имя
файла справки
|
HelpContext
|
Контекстный
идентификатор файла справки.
|
LastDLLError
|
Содержит
системный код ошибки для последнего вызова библиотеки динамической компоновки
(DLL)
|
Пример организации перехвата и обработки ошибок в процедурах
Sub ТЕСТ1 ()
‘- - Включение перехвата ошибок - --
On Error Goto МЕТКА1
<блок операторов процедуры>
‘- - оператор досрочного выхода из процедуры -
‘- - Драйвер обработки ошибок - ---------
МЕТКА1:
tt ="Ошибка =" & Err. Description & chr
(10) =
"Продолжить расчет (Да/Нет) =”
Rep=Msgbox (tt, 308,”Системная ошибка”)
1. г. Классы-коллекции VBA для работы с выделенными
областями и диапазонами - range и selection - привести синтаксис различных их конструкций и
примеры их использования - с расшифровкой назначения той или иной конструкции,
команды, примера
Объект RANGE представляет отдельную ячейку, диапазон ячеек,
целую строку, или колонку, несколько выделенных областей или трехмерный
диапазон. Объект RANGE несколько необычен, поскольку может представлять как
одну, так и множество ячеек. Для объекта RANGE не предусмотрен специальный
объект-набор, и в зависимости от конкретной ситуации его можно считать либо
отдельным объектом, либо набором.
Пожалуй, самый естественный способ получения ссылки на объект
Range - это метод Range. Имеются два вида синтаксиса для применения этого
метода. Первый использует один аргумент: объект. Range (интервал), где: объект
- это объект типа Worksheet или Range, к которому применяется метод Range. Этот
объект может быть опущен, и тогда предполагается, что метод Range применяется к
активному рабочему листу - объекту ActiveSheet; Range ("A1: B10").
ClearContents
Строка, описывающая диапазон, может содержать символы $,
задающие абсолютный стиль ссылок, но эти символы игнорируются и никак не влияют
на определение диапазона. Если метод применяется к объекту типа Worksheet, то
получается абсолютная ссылка на указанный диапазон разделитель списка - запятая
","). Например, следующий оператор ссылается на диапазон A1: B10
активного рабочего листа и очищает его рабочего листа; если же метод
применяется к объекту типа Range, то ссылка считается относительной. Например,
если текущая активная ячейка - это ячейка B3, то оператор Selection. Range
("B1")
возвращает ячейку C3, поскольку ссылка B1 считается относительной
для объекта Range (активной ячейки B3), возвращаемого свойством Selection. В то
же время оператор ActiveSheet. Range ("B1") всегда возвращает ячейку
B1.
Если вы используете имена для диапазонов ячеек рабочего
листа, то они также могут использоваться в качестве ссылки на диапазон,
например, оператор Range ("Условия"). Copy - копирует поименованный
диапазон "Условия" в буфер обмена.
Другой синтаксис для метода Range использует два аргумента:
объект. Range (ячейка1, ячейка2)
Эти два аргумента представляют собой ссылки на ячейки,
определяющие верхний левый и правый нижний углы прямоугольного диапазона ячеек.
Такой синтаксис может быть особенно удобен при определении изменяющегося
диапазона ячеек, поскольку позволяет независимо формировать координаты верхнего
левого и правого нижнего угла.
Объекты Selection также обладают свойством Range. Это
значительно упрощает использование свойств и методов, принадлежащих объектам
Range существующих выделенных областей. Приведенный ниже пример присваивает
диапазон выделенной области переменной, перемещает выделенную область, после
чего преобразует текст прописными буквами:
deRange = Selection. Range
Selection. Move Unit: = wdParagraph, Count: = 3
deRange-Case = wdLowerCase
Объект Selection представляет выделенную область. Поскольку в
каждом окне может быть только одна выделенная область, то одновременно может
существовать лишь несколько объектов Selection по одному на каждое существующее
окно или подокно. Заметим также, что, объект Selection всегда существует в
окне, даже если и не сделано явного выделения некоторой области, в последнем
случае объект Selection задает точку вставки, определенную позицией курсора.
Объект Range имеет метод Select, выделяющий область объекта
Range, и определяющий, тем самым, новый объект Selection. Симметрично, объект
Selection имеет свойство Range, возвращающее объектRange, соответствующий
выделенной области.
Объекты Range и Selection столь же многообразны по своей
структуре, как и объект Document. И даже большинство свойств у этих трех объектов
одни и те же. Эти три объекта являются схожими. Это понятно, так как
большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки,
комментарии, ссылки и многое другое - может составлять любую подобласть
документа, в том числе и выделенную подобласть. Значит, большинство ранее
описанных частей документа являются и частями (свойствами) объектов Range и
Selection. Это приятно - ведь с большинством свойств этих объектов мы уже
знакомы!
Объект Range напоминает матрешку: в каждую область вложена
область поменьше.
Объекты Range и Selection позволяют выполнять основные
операции над текстом: "выделить", "добавить",
"заменить", "удалить". У наших объектов большой набор
методов, позволяющих реализовать эти операции.
1. д. Создание и применение пользовательских функций в EXCEL (не встроенных, а
программируемых)
Даже когда кажется, что встроенные инструменты анализа данных
Excel способны выполнить все необходимые действия, работа с VBA может оказаться
более удобной. Использование VBA позволяет создавать пользовательские функции
для рабочих листов, существенно превосходящие формулы, которые могут
записываться непосредственно в ячейке.
Пользовательские функции позволяют проводить вычисления и
другие операции, выполнение которых с помощью формул, основанных на встроенных
функциях, просто невозможно. Даже когда написанная формула дает такой же
результат, пользовательская функция имеет существенные преимущества, например в
большей простоте написания, тестирования, понимания и т.д. Вместо тесной панели
формул в распоряжение предоставляется целое окно редактирования кода, где
сложную логическую конструкцию можно разбить на понятные линии. Еще одно важное
преимущество состоит в возможности вставки комментариев (и это следует
максимально использовать) непосредственно рядом с кодом, к которому они
относятся. Написание пользовательских функций рабочего листа.
Пользовательские функции Excel - это просто обычные процедуры
VBA-функций. Если сказать коротко, процедура функции начинается с декларации ее
имени и заканчивается оператором End Function. Иногда внутри может
потребоваться оператор, присваивающий значение имени функции, данное значение
как раз и возвращает функция. В простейшем примере, приведенном здесь, именно
это и демонстрируется:
FunctiDn MemoryAvailable ()smoryAvailable =
Application. MemoryFree
End Fu. icticn
Данная функция просто возвращает количество памяти в байтах,
доступных в текущее время для Excel. Заметьте, что, поскольку функция получает
данные о количестве доступной памяти из системы, она не имеет аргументов. Ниже
приведен пример немного более сложной функции, принимающей аргументы:
Function CheckForvalue (aRange,Value)
For Each objCell In aRange= False 'по умолчанию возвращается
значение
FalseobjCell. Value = Value Then= TrueForIf
Next objCell. Ction
Данная функция проверяет диапазон ячеек на наличие
определенного значения. Если значение есть где-либо в диапазоне, функция
возвращает значение True, в противном случае возвращается значение F a l s e.
Перед инициированием функции необходимо обеспечить ее двумя аргументами -
диапазоном и искомым значением.
Профессиональное написание функций
Не стоит отказываться от возможности написания функции таким
образом, чтобы выдаваемый се результат был именно таким, как вам того хотелось
бы. Зачем поручать формуле выполнять то, что можно сделать в самой функции?
Приведенная модификация функции CheckForValue вместо непонятных значений True и
F a l s e возвращает строку поясняющего текста:
Function CheckForVaiue2 (aRange, Value)Each
objCell In aRange
CheckForValue2 = "искомое значение" 6 Value &
__ "не найдено"
I;: objCell. Value = value Then= "искомое значение" &
Value & _ "находится
в ячейке" &
objCell. AddressForIfobjCellFunction
Если модифицированной функции удается найти искомое значение
где-либо внутри диапазона, она возвращает строчку вроде Искомое значение 3, 57
находится Б ячейке SFS83; в противном случае возвращается строчка Искомое
значение 3,57 не найдено.
.
Практическая часть
А) Создать программу-макрос на языке VBA
для [MS WORD], которая с помощью управляющих кнопок на форме производит такие
событийные процедуры:
. а.1. Открывает для работы документ (имя
документа не должно задаваться "жестко", т.е. программно - имя
документа должен иметь возможность выбрать пользователь вашей программы): -
используйте dialogs.
Для демонстрации работы программы откроем файл "Задание
1. doc", который содержит
пользовательскую форму и модуль с макросами.
В Word 2003 для вызова пользовательской формы выберем в меню Сервис
→ Макрос → Макросы (в Word 2007-2010 вкладка Вид
→ Макросы→ Макросы) и в открывшемся окне выберем
макрос Open_UserForm1. Нажмем кнопку Выполнить (рисунок 3). (Для
просмотра кода программы можно нажать Alt+F11 - откроется редактор VBA.)
Рисунок 3 - Запуск макроса
На экране появится форма с шестью управляющими кнопками
(рисунок 4).
Рисунок 4 - Пользовательская форма
При нажатии на кнопку "Открыть файл" откроется
диалоговое окно "Открытие документа". Открывается выбранный документ.
Код процедуры:
Private Sub cmdOpenFile_Click ()
Call openFile
End SubopenFile ()
'закрываем пользовательскую форму
Unload UserForm1
'открытие файла с помощью диалогового окна
With Dialogs (wdDialogFileOpen)= "*.
doc*"
ShowWith
'снова открываем форму
UserForm1. Show
End Sub
2. а.2. В документе программно
производится выделение какого-либо куска текста и копирование его в буфер.
При нажатии на кнопку "Копировать в буфер" будет
помещен в буфер 1 абзац активного документа.
Код процедуры:
Private Sub cmdCopyClipboard_Click ()
Call TextCopyClipboard
End SubTextCopyClipboard ()
'копируем 1 абзац
ActiveDocument. Paragraphs (1). Range. Copy
End Sub
. а.3. По нажатию управляющей кнопки
создается новый файл и в него вставляется кусок из буфера.
При нажатии на кнопку "Новый файл" создастся новый
документ, в который будет помещено содержимое буфера.
Код процедуры:
Call newDoc
End SubnewDoc ()
'закрываем пользовательскую форму
Unload UserForm1
'создаем новый документ и вставляем в него данные
из буфера
Documents. Add. Range. Paste
'снова открываем форму
UserForm1. Show
End Sub
2. а.4. По "щелчку" еще
одной управляющей кнопки на форме производится нумерация страниц текущего
документа, добавление текущей даты в конце и сохранение на диске под именем
"МояКопии. dос"
При нажатии на кнопку "Пронумеровать страницы"
производится нумерация страниц текущего документа, добавление текущей даты в
конце и сохранение на диске под именем "МояКопия. dос".
Код процедуры:
Private Sub cmdNumerPage_Click ()
'нумеруем страницы
ActiveDocument. Sections (1). Footers (1).
PageNumbers. Add PageNumberAlignment: = _, FirstPage: =True
'переходим в конец документа
Selection. EndKey wdStory
'вставляем новый абзац
Selection. TypeParagraph
'добавляем текущую дату
Selection. Text = Date
'сохраняем активный документ под именем
"МояКопия. doc"
ActiveDocument. SaveAs FileName: ="МояКопия.
doc"
End Sub
. а.5. Еще одна кнопка на форме должна
выводить активный (текущий) документ для предварительного просмотра на экран.
При нажатии на кнопку "Просмотр" будет осуществлен
вывод активного (текущиго) документа для предварительного просмотра на экран.
Код процедуры:
Private Sub cmdView_Click ()
'выводим активный документ для предварительного
просмотра на экран
ActiveDocument. PrintPreview
End Sub
2. а.6. По кнопке
"выход" все открытые документы сохраняются и работа макроса
(программы) завершается.
При нажатии на кнопку "Выход" все открытые
документы сохраняются и работа макроса (программы) завершается.
Код процедуры:
Private Sub cmdExit_Click (). Quit SaveChanges:
=wdSaveChangesSub
Б) Создать программу (макрос) для [MS
EXCEL]: макрос должен с помощью формы позволять производить следующие
манипуляции с электронными книгами:
. б.1. Открытие существующей электронной
книги с одновременной выдачей списка ее листов на форму (в объект типа ListBox или ComboBox) и возможностью перехода
с одного листа электронной книги - на другой лист - с помощью выбора элементов
этого списка (программируете событие onCange для списка). При открытии книги "Задание 2.
xls" на экране
появляется пользовательская форма (рисунок 6).
Рисунок 6 - Пользовательская форма
При нажатии на кнопку "Открыть книгу" появляется
диалоговое окно "Открытие документа". Открывается выбранный документ,
при этом в поле со списком появляются названия всех листов активной книги.
Код процедуры:
Private Sub cmdOpenFile_Click ()
'открытие файла с помощью диалогового окна
FName = Application. GetOpenFilename ("Excel
Files (*. xlsm; *. xls), *xlsm; *. xls") FName = False Then End ' если была нажата кнопка
Отмена - выходим из процедуры
открываем выбранную книгу
Workbooks. Open FName,,, 1
'очищаем поле со списком
ComboBox1. Clear
'добавляем в поле со списком ComboBox1
наименования всех листов открытой книги
For i = 1 To ActiveWorkbook. Worksheets. Count
ComboBox1. AddItem Worksheets (i). Namei
End Sub
При выборе в ComboBox какого-то элемента, лист с выбранным
названием становится активным.
Код процедуры:
Private Sub ComboBox1_Change ()
'если в поле со списком был выбран какой то лист
- открываем его
If ComboBox1. ListIndex >= 0 Then(ComboBox1.
Value). ActivateIf
End Sub
2. б.2. Создание новой
электронной книги. Предусмотреть также на форме кнопку для сохранения всех
открытых файлов или активного документа в любой момент.
При нажатии на кнопку "Создать новый документ"
появляется новая книга.
Код процедуры:
Private Sub cmdNewDoc_Click ()
Workbooks. Add
End Sub
2. б.3. Заполнение 3-го листа
активной электронной книги данными, вводимыми с формы пользователем вашей
программы.
Для заполнение 3-го листа активной электронной книги данными,
необходимо на форме заполнить поля "Фамилия" и "Дата
рождения" и нажать кнопку "Добавить".
При каждом нажатии на эту кнопку на 3 лист активной книги будут
последовательно добавляться введенные пользователем данные.
Код процедуры:
Private Sub cmdAdd_Click ()
'открываем 3 лист активной книги
'определяем последнюю заполненную строку в
текущем диапазоне
last_row = Cells (1, 1). CurrentRegion. Rows.
Count
Cells (1, 1) = "ФИО"(1,2) = "Дата"
'записываем в первую пустую строку данные из
текстовых полей, предварительно проверив правильность ввода
If last_row >= 1 ThenTextBox1. Text =
"" Or IsDate (TextBox2) = False Then MsgBox "Неверные данные, повторите ввод": Exit
Sub(last_row + 1, 1) = TextBox1. Text(last_row + 1,2) = Format (TextBox2. Text,
"dd. mm. yyyy")
End If
'выравниваем ширину столбцов по содержимому
Columns ("A: B"). AutoFit
End Sub
. б.4. На 2-м листе электронной таблицы
предусмотреть вставку и выполнение функции, которая не является стандартной
функцией Excel, а описана вами в пользовательской процедуре function.
При нажатии на кнопку "Пользовательская функция"
пользователю будет предложено ввести предложение. Введенное предложение будет
помещено в 1 ячейку 2-го листа электронной таблицы. Рядом же будет помещен
результат пользовательской функции, с помощью которой заданное предложение
будет разбито на отдельные слова.
К примеру, дана таблица, один из столбцов которой содержит
ФИО. А необходимо получить 3 столбца (1 столбец - фамилии, 2 и 3 соответственно
- имена и отчества). С помощью стандартных процедур это сделать довольно
сложно.
Поэтому было принято решение создать функцию, которая легко
справлялась бы с этой задачей.
Входными аргументами функции будет "предложение" и
"номер слова", которое необходимо получить из этого предложения.
Напишем еще одну функцию, которая будет возвращать количество
слов в заданном предложении.
Код процедуры:
Private Sub cmdFunction_Click ()
Worksheets (2). Activate= InputBox ("Введите предложение", "Ввод данных", "Самохин Федор Петрович")
Worksheets (2). Cells (1, 1) = fio
'вызов пользовательской функции, которая в
качестве результата возвращает количество слов в введенном предложении
n = Количество_слов_в_предложении (fio)i = 1 To n
'вызов пользовательской функции, которая в
качестве результата возвращает слово из предложения, которое стоит в
определенном месте
Worksheets (2). Cells (1, 1 + i) = Слово_из_предложения (fio, i)i
End SubСлово_из_предложения (Предложение,
Номер_слова)
sss = Split (Предложение)
Слово_из_предложения = sss (Номер_слова - 1)
End FunctionКоличество_слов_в_предложении
(Предложение) As Integer
If Предложение <> "" Then= Split
(Предложение)
Количество_слов_в_предложении = UBound (sss) + 1If
End Function
При вводе "Самохин Федор Петрович" (рисунок 7)
результат работы функции показан на рисунке 8. То есть функция запускалась 3
раза, в 1 раз она вернула 1 слово из введенного предложения, второй раз -
второе слово, третий раз - третье. Таким образом мы разбили введенное
предложение по словам.
Рисунок 7 - Окно ввода
Рисунок 8 - Результат работы функции
2. б.5. Предусмотреть на форме кнопку,
которая выводит на экран (на форму) электронную таблицу для предварительного
просмотра перед печатью.
При нажатии на кнопку "Просмотр" произойдет вывод
на экран электронной таблицы для предварительного просмотра перед печатью
(рисунок 9).
Рисунок 9 - Предварительный просмотр
Код процедуры:
Private Sub cmdView_Click ()
Me. Hide. SelectedSheets. PrintPreview. Show
End Sub
2. б.6. Предусмотреть на форме кнопку,
позволяющую настроить параметры страницы перед распечаткой (используйте для
этого диалоги (класс Dialogs) MS Excel).
При нажатии на кнопку "Настройка параметров"
появится окно "Параметры страницы".
Код процедуры:
Private Sub cmdParametrs_Click ()
Application. Dialogs (xlDialogPageSetup). Show
End Sub
При этом предусмотрено сохранение всех открытых файлов в
любой момент. Для этого нужно нажать на кнопку "Сохранить все" в
правом верхнем углу формы.
Код процедуры:
Private Sub cmdSaveAll_Click ()
'сохраняем все открытые книгиEach w In
Application. Workbooks. Savew
End Sub
. б.7. Предусмотреть на форме кнопку
"Выход" с сохранением всех сделанных изменениях в книгах. xls
При нажатии на кнопку "Выход" программа будет
закрыта, все сделанные изменений будут сохранены.
Код процедуры:
Private Sub cmdExit_Click ()
For Each w In Application. Workbooks. Savew. Quit
End Sub
Список
использованной литературы
1. А.
Васильев, А. Андреев. VBA в Office 2000. Учебный курс - С-Пб.:
"Питер" <http://www.piter-press.ru/>, 2001
. В.И. Король. Visual Basic 6.0, Visual Basic for
Applications 6.0. Язык
программирования. Справочник с примерами. - М.: Издательство КУДИЦ, 2000
. В.А.
Биллиг. "VBA в Office 2000. Офисное программирование" - М.:
Издательско-торговый дом "Русская Редакция"
<http://www.rusedit.ru/books_fr.htm>, 1999
. Руководство
программиста по Visual Basic для Microsoft Office 97 /Пер. с англ. - М.:
Издательский отдел "Русская Редакция"
<http://www.rusedit.ru/books_fr.htm> TOO "Channel Trading
Ltd.", 1997
. В.А.
Биллиг, М.И. Дехтярь. VBA и Office 97. Офисное программирование - М.:
Издательский отдел "Русская Редакция"
<http://www.rusedit.ru/books_fr.htm> ТОО "Channel Trading Ltd."
1998
6. Кен
Гетц, Майк Гилберт. Программирование на Visual Basic 6 и VBA. Руководство
разработчика: Пер. с
англ. - К.: Издательская группа BHV, 2001
Приложения
Для демонстрации работы программы откроем файл "Задание
1. doc", который содержит
пользовательскую форму и модуль с макросами.
В Word 2003 для вызова пользовательской формы выберем в меню Сервис
→ Макрос → Макросы (в Word 2007-2010 вкладка Вид
→ Макросы→ Макросы) и в открывшемся окне выберем
макрос Open_UserForm1. Нажмем кнопку Выполнить. (Для просмотра
кода программы можно нажать Alt+F11 - откроется редактор VBA.)
При нажатии на 1 кнопку ("Открыть файл") откроется
диалоговое окно "Открытие документа". Открывается выбранный документ.
Код процедуры:
Call openFile
End Sub
Sub openFile ()
'закрываем пользовательскую форму
Unload UserForm1
'открытие файла с помощью диалогового окна
With Dialogs (wdDialogFileOpen)= "*.
doc*"
ShowWith
'снова открываем форму
UserForm1. Show
End Sub
При нажатии на 2 кнопку ("Копировать в буфер")
будет помещен в буфер 1 абзац активного документа.
Код процедуры:
Private Sub cmdCopyClipboard_Click ()
Call TextCopyClipboard
End Sub
Sub TextCopyClipboard ()
'копируем 1 абзац
ActiveDocument. Paragraphs (1). Range. Copy
End Sub
При нажатии на 3 кнопку ("Новый файл") создастся
новый документ, в который будет помещено содержимое буфера.
Код процедуры:
Private Sub cmdNewDocument_Click ()
Call newDoc
End SubnewDoc ()
'закрываем пользовательскую форму
Unload UserForm1
'создаем новый документ и вставляем в него данные
из буфера
Documents. Add. Range. Paste
'снова открываем форму
UserForm1. Show
End Sub
При нажатии на 4 кнопку ("Пронумеровать страницы")
производится нумерация страниц текущего документа, добавление текущей даты в
конце и сохранение на диске под именем "МояКопия. dос".
Код процедуры:
Private Sub cmdNumerPage_Click ()
'нумеруем страницы
ActiveDocument. Sections (1). Footers (1).
PageNumbers. Add PageNumberAlignment: = _, FirstPage: =True
'переходим в конец документа
Selection. EndKey wdStory
'вставляем новый абзац
Selection. TypeParagraph
'добавляем текущую дату
Selection. Text = Date
'сохраняем активный документ под именем
"МояКопия. doc"
ActiveDocument. SaveAs FileName: ="МояКопия.
doc"
End Sub
При нажатии на 5 кнопку ("Просмотр") будет
осуществлен вывод активного (текущиго) документа для предварительного просмотра
на экран.
Код процедуры:
Private Sub cmdView_Click ()
'выводим активный документ для предварительного
просмотра на экран
ActiveDocument. PrintPreview
End Sub
При нажатии на 6 кнопку ("Выход") все открытые
документы сохраняются и работа макроса (программы) завершается.
Код процедуры:
Private Sub cmdExit_Click (). Quit SaveChanges:
=wdSaveChanges
End Sub
При открытии книги "Задание 2. xls" на экране
появляется пользовательская форма.
При нажатии на кнопку "Открыть книгу" появляется
диалоговое окно "Открытие документа". Открывается выбранный документ,
при этом в поле со списком появляются названия всех листов активной книги.
Код процедуры:
Sub cmdOpenFile_Click ()
'открытие файла с помощью диалогового окна
FName = Application. GetOpenFilename ("Excel
Files (*. xlsm; *. xls), *xlsm; *. xls") FName = False Then End ' если была нажата кнопка
Отмена - выходим из процедуры
' открываем выбранную книгу
Workbooks. Open FName,,, 1
'очищаем поле со списком
ComboBox1. Clear
'добавляем в поле со списком ComboBox1
наименования всех листов открытой книги
For i = 1 To ActiveWorkbook. Worksheets. Count
ComboBox1. AddItem Worksheets (i). Namei
End Sub
Код процедуры:
Private Sub ComboBox1_Change ()
'если в поле со списком был выбран какой то лист
- открываем его
If ComboBox1. ListIndex >= 0 Then(ComboBox1. Value).
ActivateIf
End Sub
При нажатии на кнопку "Создать новый документ"
появляется новая книга.
Код процедуры:
Private Sub cmdNewDoc_Click ()
Workbooks. Add
End Sub
Для заполнение 3-го листа активной электронной книги данными,
необходимо на форме заполнить поля "Фамилия" и "Дата
рождения" и нажать кнопку "Добавить".
При каждом нажатии на эту кнопку на 3 лист активной книги
будут последовательно добавляться введенные пользователем данные.
Код процедуры:
Private Sub cmdAdd_Click ()
'открываем 3 лист активной книги
ActiveWorkbook. Worksheets (3). Activate
'определяем последнюю заполненную строку в
текущем диапазоне
last_row = Cells (1, 1). CurrentRegion. Rows.
Count
Cells (1, 1) = "ФИО"(1,2) = "Дата"
'записываем в первую пустую строку данные из
текстовых полей, предварительно проверив правильность ввода
If last_row >= 1 ThenTextBox1. Text =
"" Or IsDate (TextBox2) = False Then MsgBox "Неверные данные, повторите ввод": Exit
Sub(last_row + 1, 1) = TextBox1. Text(last_row + 1,2) = Format (TextBox2. Text,
"dd. mm. yyyy")
End If
'выравниваем ширину столбцов по содержимому
Columns ("A: B"). AutoFit
End Sub
При нажатии на кнопку "Пользовательская функция"
пользователю будет предложено ввести предложение. Введенное предложение будет
помещено в 1 ячейку 2-го листа электронной таблицы. Рядом же будет помещен
результат пользовательской функции, с помощью которой заданное предложение
будет разбито на отдельные слова.
К примеру, дана таблица, один из столбцов которой содержит
ФИО. А необходимо получить 3 столбца (1 столбец - фамилии, 2 и 3 соответственно
- имена и отчества). С помощью стандартных процедур это сделать довольно
сложно.
Поэтому было принято решение создать функцию, которая легко
справлялась бы с этой задачей.
Входными аргументами функции будет "предложение" и
"номер слова", которое необходимо получить из этого предложения.
Напишем еще одну функцию, которая будет возвращать количество
слов в заданном предложении.
Код процедуры:
Private Sub cmdFunction_Click ()
Worksheets (2). Activate= InputBox ("Введите предложение", "Ввод данных", "Самохин Федор Петрович")
Worksheets (2). Cells (1, 1) = fio
'вызов пользовательской функции, которая в
качестве результата возвращает количество слов в введенном предложении
n = Количество_слов_в_предложении (fio)i = 1 To n
'вызов пользовательской функции, которая в
качестве результата возвращает слово из предложения, которое стоит в
определенном месте
Worksheets (2). Cells (1, 1 + i) = Слово_из_предложения (fio, i)i
End SubСлово_из_предложения (Предложение,
Номер_слова)
sss = Split (Предложение)
Слово_из_предложения = sss (Номер_слова - 1)
End FunctionКоличество_слов_в_предложении
(Предложение) As Integer
If Предложение <> "" Then= Split
(Предложение)
Количество_слов_в_предложении = UBound (sss) + 1If
End Function
При вводе "Самохин Федор Петрович" результат работы
функции показан на рисунке 5. Т.е. функция запускалась 3 раза, в 1 раз она
вернула 1 слово из введенного предложения, второй раз - второе слово, третий
раз - третье. Т.о. мы разбили введенное предложение по словам.
При нажатии на кнопку "Просмотр" произойдет вывод
на экран электронной таблицы для предварительного просмотра перед печатью.
Код процедуры:
Private Sub cmdView_Click ()
Me. Hide
ActiveWindow. SelectedSheets. PrintPreview. Show
End Sub
При нажатии на кнопку "Настройка параметров"
появится окно "Параметры страницы".
Код процедуры:
Private Sub cmdParametrs_Click ()
Application. Dialogs (xlDialogPageSetup). Show
End Sub
При этом предусмотрено сохранение всех открытых файлов в
любой момент. Для этого нужно нажать на кнопку "Сохранить все" в
правом верхнем углу формы.
Код процедуры:
Private Sub cmdSaveAll_Click ()
'сохраняем все открытые книги
For Each w In Application. Workbooks. Savew
End Sub
При нажатии на кнопку "Выход" программа будет
закрыта, все сделанные изменений будут сохранены.
Код процедуры:
Private Sub cmdExit_Click ()
For Each w In Application. Workbooks. Savew. Quit
End Sub