Ирина Фризен - Офисное программирование
With Application
Maxiterations = 1000
MaxChange = 0.0001
End With
Вручную эти величины устанавливаются на вкладке Вычисления (Calculation) диалогового окна Параметры (Options), вызываемого командой Сервис, Параметры (Tools, Options).
Метод Sort
Сортировка позволяет выстраивать данные в лексикографическом порядке по возрастанию или убыванию. Метод sort осуществляет сортировку строк списков и баз данных, а также столбцов рабочих листов с учетом до трех критериев, по которым производится сортировка. Сортировка данных вручную совершается с использованием команды Данные, Сортировка (Data, Sort).
Синтаксис:
Объект. Sort(key1, order1, key2, order2, key3, order3, header, orderCustom, matchCase, orientaticn)
Аргументы:
Объект Диапазон, который будет сортироваться
Key1 Ссылка на первое упорядочиваемое поле
Order1 Задает порядок упорядочивания. Допустимые значения: xlAscending (возрастающий порядок); xlDescending (убывающий порядок)
key2 Ссылка на второе упорядочиваемое поле
order2 Задает порядок упорядочивания. Допустимые значения: xlAscending (возрастающий порядок); xlDescending (убывающий порядок)
header Допустимые значения: xlYes (первая строка диапазона содержит заголовок, который не сортируется); xlNo (первая строка диапазона не содержит заголовка, по умолчанию считается данное значение); xlGuess (Excel решает, имеется ли заголовок)
orderCustom Пользовательский порядок сортировки. По умолчанию используется Normal
matchCase Допустимые значения: True (учитываются регистры) и False (регистры не учитываются)
orientation Допустимые значения: xlTopToBottom (сортировка осуществляется сверху вниз, т. е. по строкам); xlLeftToRight (слева направо, т. е. по столбцам)
Например, диапазон А1:С20 рабочего листа лист1 сортируется следующей командой в порядке возрастания так, что первоначальная сортировка происходит по первому столбцу этого диапазона, а второстепенная – по второму:
Worksheets(«Лист»).Range(«A1: C20»).Sort _
key1:=Worksheets(«Sheet1»).Range(«A1»), _
key2:=Worksheets («Sheet1»).Range («B1»)
Округление чиселОкруглять десятичные числа приходится часто, особенно при работе с денежными значениями. VBA не предлагает прямого решения таких задач, но обсуждаемые ниже приемы помогут решить эти проблемы.
1 способ
Функция Round
Пример:
X= round(2.505, 2)
Значение х будет 2,5, а не 2,51.
Поэтому часто не используется.
2 способ
Функция Format
Пример:
sngОкругление=Format(SngНеокругленное, “#, 0.00”)
3 способ
Функция FormatNumber
SngОкругление= FormatNumber(sbgНеокругленное, 2)
Для изменения знаков после запятой измените число нулей после десятичной точки в аргументе Format, либо измените число, задающее значение второго аргумента, на нужное.
Примечание. Переменная, в которую помещается округленное значение, должна иметь тип string, single, double, decimal, currency или variant, но не тип integer или long.
Приведение данныхДля приведения введенных данных к нужному типу в VBA включен обширный набор функций, одна из которых – CDBL. Синтаксис:
CDbl(выражение)
Обязательный аргумент выражение является любым строковым или числовым выражением. Для считывания информации, введенной в текстовое поле в созданной форме, вводят переменную и прописывают выражение:
А = Cdbl(textBoxN.text)
После чего с данной переменной можно работать.
Для выведения значений непосредственно в ячейки книги Excel удобно использовать объект Range:
range(«A5»).value = a
Функцией, обратной по действию к CDbl, является функция CStr – она переводит числа в строки и удобна для вывода результата либо в ячейку на лист, либо в то или иное текстовое окно.
TextBoxN.text = CStr(.Range(«A8»).value)
– считывание значения с ячейки и вывод его в текстовое окно.
Функция Trim (строка) возвращает копию строки, из которой удалены пробелы, находящиеся в начале и конце строки.
Создание VBA-программИспользование метода GoalSeek
Пример 41. Разработать программу, которая по введенным числовым значениям некоторого уравнения решает данное уравнение и находит неизвестную переменную х. Результат вычисления выводится в текстовое окно на форме и на лист Excel.
Рис. 92. Разработанная форма примера 41 в рабочем состоянии
Технология выполнения
1. Запустите приложение Excel, сохраните документ.
2. Перейдите в редактор VBA.
3. Создайте форму согласно приведенному рис. 92.
4. На листе Excel расположите необходимый текст (оформление), предусмотрев соответствующие ячейки вывода информации (рис. 93).
Рис. 93. Вывод результатов на лист excel после запуска формы примера 41
5. Обработайте кнопки.
Кнопка Вычислить
Private Sub CommandButton1_Click()
Dim a, b, c As Double
a = CDbl(TextBox1.Text)
b = CDbl(TextBox2.Text)
c = CDbl(TextBox3.Text)
With ActiveSheet
Range(«b3»).Value = a
Range(«b4»).Value = b
Range(«b5»).Value = c
Range(«b6»).FormulaLocal = «=b3*b7^3+b4*sin(b7)»
Range(«b6»).GoalSeek Goal:=c, changingCell:=Range(«b7»)
TextBox4.Text = CStr(.Range(«b7»).Value)
TextBox4.Text = FormatNumber(TextBox4.Text, 2)
End With
End Sub
Кнопка Закрыть
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
Процедура инициализации формы
Private Sub UserForm_initialize()
Worksheets(1).Visible = False
End Sub
Использование методов AutoFill при заполнении таблицПример 42. Создать программу, которая по введенным текстовым данным в соотвествующие текстовые поля формы автоматизирует ввод данных на студентов некоторой специальности учебного заведения. Результаты заполнения текстовых полей выводятся на лист excel, что позволяет при необходимости распечатать данные.
Технология выполнения
1. Запустите приложение Excel, сохраните документ.
2. Перейдите в редактор VBA. Создайте форму согласно приведенному рис. 94.
Рис. 94. Разработанная форма примера 42 в режиме конструктора
3. На листе Excel расположите необходимый текст (оформление), предусмотрев соответствующие ячейки вывода информации (рис. 95).
Рис. 95. Вывод результатов на лист excel после запуска формы
4. Обработайте кнопки.
Кнопка Создать таблицу
Const strNomer = 3 количество строк для заголовка
Dim strName1 As String 'строка для адресации ячеек
Dim strName2 As String
Dim nomer As Long номер очередной строки таблицы
Private Sub CommandButton1_Click()
ActiveWorkbook.SaveAs («работа с базой данных. xls»)
nomer = 1 End Sub
Кнопка Добавить строку
Private Sub CommandButton2_Click()
strName1 = Trim(Str(strNomer + nomer))
With ActiveSheet 'ввод данных для новой отчетной таблицы
Range("A" + strName1).Value = nomer
Range("B" + strName1).Value = TextBox1.Text
Range("C" + strName1).Value = TextBox2.Text
Range("D" + strName1).Value = TextBox3.Text
'автозаполнение с текущей строки таблицы
strName2 = Trim(Str(strNomer + nomer + 1))
Set range1 =.Range("A" + strName1 +":D" + strName1)
Set range2 =.Range("A" + strName1 +":D" + strName2)
range1.AutoFill Destination:=range2
Range("A" + strName2 +":D" + strName2).Clear
End With
' очистка полей формы для ввода очередной записи
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox1.SetFocus
nomer = nomer + 1
End Sub
Кнопка Закончить таблицу
Private Sub CommandButton3_Click()
'закрытие формы подведение итогов и вывод фамилии преподавателя
UserForm1.Hide
With ActiveSheet
strName2 = Trim(Str(strNomer + nomer + 2))
Range("A" + strName2).Value = «классный руководитель»
Range("D" + strName2).Value = TextBox4.Text
End With
End Sub
5. Откомпилируйте программу и запустите на выполнение.
Пример 43. Разработать программу, которая по введенным переменным в соответствующие поля формы решает простейшее линейное уравнение y = a*x + b*x, находит неизвестную переменную х и выводит результат вычислений на рабочий лист Excel.
Пример 44. Разработать программу, которая по введенным переменным в соответствующие поля формы решает уравнение вида y = a*x^3 + 3b*sinx, находит неизвестную переменную х и выводит результат вычислений на рабочий лист Excel.
Пример 45. Разработать программу, которая по введенным переменным в соответствующие поля формы решает уравнение вида y = 5a*x^1/3 + 3b*tg4x, находит неизвестную переменную х и выводит результат вычислений на рабочий лист Excel.
Пример 46. Разработать программу, которая по введенным переменным в соответствующие поля формы решает уравнение вида y = ln(a*x^3) + 3b*cos(e^x), находит неизвестную переменную х и выводит результат вычислений на рабочий лист Excel.
7.2. Использование возможностей VBA при непосредственных расчетах
Создание VBA-программПример 47. Дан табличный документ указанного ниже вида. Необходимо:
1) создать шаблонную часть этого документа с помощью табличного процессора Excel;
2) составить программу на языке VBA, которая будет запрашивать у пользователя исходные данные для заполнения этой таблицы, производить необходимые расчеты и помещать все данные в соответствующие ячейки, предусмотренные в шаблоне.