1) создать шаблонную часть этого документа с помощью табличного процессора Excel;
   2) составить программу на языке VBA, которая будет запрашивать у пользователя исходные данные для заполнения этой таблицы, производить необходимые расчеты и помещать все данные в соответствующие ячейки, предусмотренные в шаблоне.
Отклонение фактического уровня издержек обращения от плана за месяц _________________ 20__ г.
 
   Звездочкой (*) помечены те графы таблицы, по которым необходимо подвести итог.
 
    Технология выполнения
   Анализ таблицы показывает, что вид деятельности, прогноз прибыли и фактическая прибыль являются исходными данными, отклонение (в процентах и в сумме) – расчетными. Кроме того, рассчитываются итоги по некоторым графам таблицы.
    Создание шаблона табличного документа
   Шаблон создается на обычном рабочем листе в Excel. При этом необходимо только зарезервировать свободные ячейки для занесения следующих данных: месяц, год, потребительское общество, сумма издержек, товарооборот, уровень издержек. Поскольку заранее неизвестно количество потребительских обществ, то ячейки для итогов и ФИО экономиста заранее не резервируются. Рабочий лист переименован в Отчет. Реализация такого шаблона представлена на рис. 96.
 
    Рис. 96.Шаблон-заготовка табличного документа
 
   На этом рисунке желтым цветом обозначены те ячейки, которые во время работы программы будут заполняться исходными и расчетными данными.
    Математическая модель решения задачи
   Кроме организации ввода исходных данных и вывода их в некоторые ячейки электронной таблицы, программа должна производить расчет отклонений и итоговых значений по графам «Сумма издержек – план», «Сумма издержек – факт», «Товарооборот – план», «Товарооборот – факт», «Уровень издержек – план», «Уровень издержек – факт», «Отклонение по уровню». Для расчетных величин используем следующие переменные:
   Nomer – номер текущей строки таблицы;
   SP – планируемая сумма издержек;
   SF – фактическая сумма издержек;
   TP – планируемый товарооборот;
   TF – фактический товарооборот;
   IP – планируемый уровень издержек;
   EF – фактический уровень издержек;
   ItogSP – накопление итога по столбцу «планируемая сумма издержек»;
   ItogSF – накопление итога по столбцу «фактическая сумма издержек»;
   ItogTP – накопление итога по столбцу «планируемый товарооборот»;
   ItogTF – накопление итога по столбцу «фактический товарооборот»;
   ItogIP – накопление итога по столбцу «планируемый уровень издержек»;
   ItogEF – накопление итога по столбцу «фактический уровень издержек».
   С учетом введенных обозначений расчетные формулы будут иметь следующий вид:
   1) для отклонений:
   [Отклонение в %] = (F – P) / P * 100
   [Отклонение в сумме] = F – P
   Результаты этих вычислений можно не сохранять в отдельных переменных, так как они сразу могут быть занесены в соответствующие ячейки электронной таблицы;
   2) для итогов по прогнозу и факту:
   ItogP = ItogP + P
   ItogF = ItogF + F
   Эти формулы реализуют алгоритм получения итоговой суммы методом накопления, когда величина прогноза (факта), соответствующая очередному виду деятельности, добавляется к сумме соответствующих величин по уже рассмотренным видам деятельности. Назовем эти суммы промежуточными. Когда будут обработаны все виды деятельности, промежуточные суммы превратятся в окончательные – итоговые. В начале этого процесса (до того, как будет рассчитываться первая промежуточная сумма) переменные ItogP и ItogF равны нулю;
   3) для итогов по отклонениям:
   [итоговое отклонение в процентах] = (ItogF – ItogP) / ItogP * 100
   [итоговое отклонение в сумме] = ItogF – ItogP
   Результаты этих вычислений можно не сохранять в отдельных переменных, так как они сразу могут быть занесены в соответствующие ячейки электронной таблицы.
 
    Разработка интерфейса пользователя
   Каждому текстовому полю поменяем стандартное имя (TextBox) на более понятное (рис. 97). В нашем примере:
   TextBox1 – MesTextBox – ввод месяца;
   TextBox2 – YearTextBox – ввод года;
   TextBox3 – FIOTextBox – ввод фамилии, имени и отчества экономиста;
   TextBox4 – POTextBox – ввод названия потребительского общества;
   TextBox5 – SPTextBox – планируемая сумма издержек;
   TextBox6 – SFTextBox – фактическая сумма издержек;
   TextBox7 – TPTextBox – планируемый товарооборот;
   TextBox8 – TFTextBox – фактический товарооборот;
   TextBox9 – IPTextBox – планируемый уровень издержек;
   TextBox10 – EFTextBox – фактический уровень издержек.
 
    Рис. 97.Разработанная форма примера 47 в рабочем состоянии
 
    Программа на языке VBA
   ' Объявление переменных и констант
   Const StrNomer = 7 'количество строк для заголовка таблицы
   Dim Nomer As Long 'номер очередной строки таблицы (потребительское общество)
   Dim SP As Long
   Dim SF As Long
   Dim TP As Long
   Dim TF As Long
   Dim IP As Long
   Dim EF As Long
   Dim ItogSP As Long
   Dim ItogSF As Long
   Dim ItogTP As Long
   Dim ItogTF As Long
   Dim ItogIP As Long
   Dim ItogEF As Long
   Dim StrName1 As String
   Dim StrName2 As String
 
   'Процедура инициализации формы
   Private Sub UserForm_Initialize()
   Worksheets(«Отчет»).Activate
   MesTextBox.SetFocus
   End Sub
 
   'Процедура считывания заголовочных данных и вывода их в ячейки электронной таблицы Private Sub CommandButton3_Click()
   'Ввод данных для новой отчетной таблицы
   With ActiveSheet
   Range(«E3»).Value = MesTextBox.Text
   Range(«G3»).Value = YearTextBox.Text
   End With
   ActiveWorkbook.SaveAs ("Отклонение фактического уровня издержек обращения от плана за " + MesTextBox.Text + «месяц. xls»)
   Nomer = 1
   ItogSP = 0
   ItogSF = 0
   ItogTP = 0
   ItogTF = 0
   ItogIP = 0
   ItogEF = 0
   End Sub
 
   ' Процедура обработки данных по видам деятельности
   Private Sub CommandButton2_Click()
   StrName1 = Trim(Str(StrNomer + Nomer))
   With ActiveSheet
   Range("A" + StrName1).Value = Nomer
   Range("B" + StrName1).Value = POTextBox.Text
   SP = Val(SPTextBox.Text)
   Range("C" + StrName1).Value = SP
   ItogSP = ItogSP + SP
   SF = Val(SFTextBox.Text)
   Range("D" + StrName1).Value = SF
   ItogSF = ItogSF + SF
   TP = Val(TPTextBox.Text)
   Range("E" + StrName1).Value = TP
   ItogTP = ItogTP + TP
   TF = Val(TFTextBox.Text)
   Range("F" + StrName1).Value = TF
   ItogTF = ItogTF + TF
   IP = Val(IPTextBox.Text)
   Range("G" + StrName1).Value = IP
   ItogIP = ItogIP + IP
   EF = Val(EFTextBox.Text)
   Range("H" + StrName1).Value = EF
   ItogEF = ItogEF + EF
   Range("I" + StrName1).Value = EF – IP
   'Выполнение автозаполнения с текущей строки таблицы на следующую строку
   StrName2 = Trim(Str(StrNomer + Nomer + 1))
   Set Range1 =.Range("A" + StrName1 +":I" + StrName1)
   Set Range2 =.Range("A" + StrName1 +":I" + StrName2)
   Range1.AutoFill Destination:=Range2
   Range("A" + StrName2 +":I" + StrName2).ClearContents
   End With
 
   'Очистка полей формы для ввода очередных данных
   POTextBox.Text = ""
   SPTextBox.Text = ""
   SFTextBox.Text = ""
   TPTextBox.Text = ""
   TFTextBox.Text = ""
   IPTextBox.Text = ""
   EFTextBox.Text = ""
   POTextBox.SetFocus
   Nomer = Nomer + 1
   End Sub
 
   'Закрытие формы, подведение итогов и вывод фамилии экономиста
   Private Sub CommandButton1_Click()
   UserForm1.Hide
   StrName1 = Trim(Str(StrNomer + Nomer))
   With ActiveSheet
   Range("A" + StrName1).Value = «Итого:»
   Range("C" + StrName1).Value = ItogSP
   Range("D" + StrName1).Value = ItogSF
   Range("E" + StrName1).Value = ItogTP
   Range("F" + StrName1).Value = ItogTF
   Range("G" + StrName1).Value = ItogIP
   Range("H" + StrName1).Value = ItogEF
   Range("I" + StrName1).Value = ItogEF – ItogIP
   StrName2 = Trim(Str(StrNomer + Nomer + 2))
   Range("A" + StrName2).Value = «Экономист:»
   Range("G" + StrName2).Value = FIOTextBox.Text
   End With
   End Sub
    Использование программы в режиме выполнения и получения результатов
   Перед запуском программы сохраним рабочую книгу под именем отчет1.xls.
   Кнопку «Создать отчетную таблицу» следует нажимать один раз после ввода заголовочной информации, кнопка «Добавить строку» нажимается каждый раз после ввода данных по очередному виду деятельности. После ввода всех данных необходимо нажать кнопку «Закончить», а затем переключиться в окно Microsoft Excel. На рабочем листе появится результат, аналогичный рис. 98.
Задачи на закрепление материала
    Пример 48. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных по обслуживанию населения некоторой организацией за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист Excel.
 
    Рис. 98.Шаблон табличного документа, заполненный данными
 
 
    Пример 49. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных по расчету товарного баланса некоторой организацией, занимающейся торговлей, за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист excel.
    Пример 50. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных на отпуск товара с некоторого склада и формирует счет-фактуру за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист excel.
 
    Пример 51.Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных на студентов определенной специальности. Данные выводятся на рабочий лист excel. Предусмотреть на листе excel кнопку, которая вызывает необходимую форму для пользователя, не загружая редактор vba.
    Технология выполнения
   1. Сохраните новый документ Excel.
   2. Создайте форму приложения, отвечающую требованиям задачи (см. рис. 99а).
   3. Пропишите процедуры обработки нажатия кнопок Создать отчетную таблицу, Добавить строкуи Закончить(см. пример 47).
   4. При выводе информации на рабочий лист Excel придерживайтесь оформления, предложенного на рис. 99б.
 
    Рис. 99а.Разработанная форма примера 51 в рабочем состоянии
 
    Рис. 99б.Вывод информации на лист excel после нажатия кнопки «Закончить»
 
   5. Произведем резентацию формы, т. е. создадим кнопку запуска формы непосредственно на листе Excel, так как запускать форму на выполнение каждый раз из редактора VBA не очень красиво и неудобно для пользователя. Для простоты использования формы поступим следующим образом: установим на рабочем листе Excel со списком группы кнопку «Диалог», нажатие которой будет приводить к появлению разработанной формы (диалогового окна). Для этого:
   1) выберите в главном меню Microsoft Excel <Сервис> <Макрос><Макросы…>;
   2) укажите имя макроса, например Макрос1, и нажмите <Создать>. После этого загрузится редактор VBA с заготовкой
   Sub Макрос1()
   End Sub
   3) вставьте в эту заготовку оператор UserForm1.Show, активизирующий созданную форму;
   4) далее выберите в главном меню книги Excel <Вид><Панели инструментов><Формы>. Появится панель с элементами управления. Выберите <Кнопка>, после чего можно нарисовать кнопку на рабочем листе Excel;
   5) после этого сразу появляется диалоговое окно «Назначить макрос объекту». Выберите Макрос1;
   6) чтобы название кнопки было более содержательным, щелкните на ней правой клавишей мыши. В появившемся рядом меню выберите <Изменить текст>. После этого установите текст «Диалог».
   Теперь при нажатии кнопки «Диалог» на рабочем листе появится разработанное диалоговое окно примера.

7.3. Финансовые функции

Расчет амортизации
   VBA предоставляет ряд встроенных функций, которые можно использовать для выполнения финансовых расчетов. Они разбиты на три основные группы: функции учета амортизации, функции учета отчислений и функции учета денежных потоков. Мы рассмотрим одну их этих групп – функции учета амортизации. Эти функции используются в бухгалтерском деле для предоставления в денежном выражении обесценивания основных средств за определенный период времени. Например, фирме, являющейся владельцем грузового автомобиля, необходимо рассчитать сумму ежегодной амортизации грузовика для вычисления текущей стоимости грузовика в любой момент времени. Поскольку амортизация влияет на размер налогов, правительство часто устанавливает обязательные формулы, которые следует применять для расчета амортизации.
   Под амортизацией понимают уменьшение стоимости имущества (основных средств) в процессе эксплуатации. Обычно оценивают величину этого уменьшения, приходящуюся на единицу времени. В финансовый пакет VBA включены три функции для расчетов амортизации (табл. 21).
 
    Таблица 21
Общие параметры функций для расчетов амортизации
 
   Функция SLN вычисляет амортизацию (снижение стоимости) за один период времени, используя метод равномерной амортизации. Ее вызов имеет вид:
   SLN( cost, salvage, life)=SLN( стоимость, остаток, период)
   Пусть компьютер стоимостью 6000 руб. имеет срок эксплуатации 5 лет, после чего его стоимость оценивается в 1500 руб. Тогда его ежегодная амортизация составит (при равномерном методе оценки): SLN(6000,1500, 5) = 900 руб.
   Функция SYD используется для расчета годовой амортизации по линейному методу. Сумма долей амортизации в этом методе определяется как сумма номеров лет эксплуатации:
   1+2+…+ life = life(life+1)/2,
   а доля амортизации за i-й год пропорциональна количеству лет (life – i +1), оставшихся до конца периода эксплуатации. Синтаксис этой функции:
   SYD( cost, salvage, life, period)=SYD( стоимость, остаток, время_экспл, период)
   При расчете предыдущего примера получим за первый год эксплуатации компьютера амортизацию
   SYD(6000,1500,5,1)= 1500 руб.
   а за последний год —
   SYD(6000,1500,5,5)= 300 руб.
    Примечание.Все параметры указываются через запятую.
   Функция DDB вычисляет величину амортизации имущества для заданного периода с применением метода двукратного (или k-кратного) учета амортизации. В этом методе амортизация максимальна в первый период и снижается в последующие периоды.
   Синтаксис:
   DDB(cost, salvage, life, periodi, factor)=DDB( нач_ стоим, остаток, время_экспл, период, коэффициент)
   Параметр factor (коэффициент)– это норма снижения балансовой стоимости (амортизации). По умолчанию он равен 2 (метод двукратного учета амортизации).
   Функция DDBиспользует следующую формулу для вычисления амортизации за период:
   Если нужно использовать другой метод вычисления амортизации, измените значение коэффициента.
   В примере с компьютером по методу двукратной амортизации она составит:
   за первый год: DDB(6000,1500, 5,1) = 2400 руб.;
   за второй – 1440 руб.;
   за третий – 660 руб.;
   а за четвертый и пятый будет равна 0.
   Все пять аргументов должны быть положительными числами.
    Замечания.Метод двойного процента со снижающегося остатка вычисляет амортизацию, используя увеличенный коэффициент. Амортизация максимальна в первый период, в последующие периоды уменьшается.
    Примеры.Предположим, что предприятие приобрело новую машину. Машина стоит 2400 $ и имеет срок службы 10 лет. Остаточная стоимость составляет 300 $. Следующие примеры показывают амортизацию за несколько периодов. Результаты округляются до двух знаков после запятой.
    ddb(2400,300,3650,1)равняется 1,32 $, амортизация за первый день.
   Microsoft Excel автоматически предполагает, что коэффициент равен 2.
    ddb(2400,300,120,1)равняется 40,00 $, амортизация за первый месяц.
    ddb(2400,300,10,1)равняется 480,00 $, амортизация за первый год.
    ddb(2400,300,10,2,1,5)равняется 306,00 $, амортизация за второй год при использования коэффициента, равного 1,5 (а не метода двойного процента).
    ddb(2400,300,10,10)равняется 22,12 $, амортизация за десятый год. Microsoft Excel автоматически предполагает, что коэффициент равен 2.
Создание VBA-программы
    Пример 52. Создать программу, которая по введенным данным в текстовые поля формы рассчитывает амортизацию имущества за заданный период времени с использованием метода двукратного учета. Диалоговое окно расчета амортизации должно предусматривать: ввод исходных данных (начальная и остаточная стоимости, срок эксплуатации в годах), задание параметров амортизации (день, месяц, год и какой по счету). Вычисление амортизации по заданным условиям и вывод отчета произвести на рабочий лист excel. При этом следует предусмотреть, чтобы кнопка «Вывести отчет» являлась недоступной до вычисления амортизации.
    Технология выполнения
   1. Запустите приложение Excel и сохраните книгу под соответствующим именем.
   2. Создайте форму аналогично приведенному рис. 100.
   3. Пропишите работу кнопки « Вычислить»:
   Private Sub CommandButton1_Click()
   Dim timeall As Integer
    Рис. 100.Разработанная форма примера 52 в рабочем состоянии
   Dim amort As Double
   With ComboBox1
   If.ListIndex = 0 Then
   timeall = Textbox3.Value * 365
   ElseIf.ListIndex = 1 Then
   timeall = Textbox3.Value * 12
   Else
   timeall = Textbox3.Value
   End If
   End With
   amort = DDB(TextBox1.Value, TextBox2.Value, timeall,
   TextBox4.Value)
   TextBox5.Value = amort
   CommandButton2.Enabled = True
   End Sub
   Обратите внимание на вычисление значений параметра timeall в зависимости от выбора пункта в раскрывающемся списке (день, месяц, год) и использования функции DDB.
   4. Заполнение поля со списком происходит в процедуре инициализации формы:
   Private Sub UserForm_initialize()
   With ComboBox1
   AddItem «день»
   AddItem «месяц»
   AddItem «год»
   ListIndex = 0
   End With
   End Sub
   Эта процедура запускается при использовании известного вам оператора Show.
   5. Нажатие кнопки « Вывести отчет» должно приводить к выводу отчета на рабочий лист Excel в следующем формате (рис. 101):
 
    Рис. 101.Вывод вычислений на лист excel в примере 52
Задача на закрепление материала
    Пример 53. Функция ddb() имеет пять аргументов, последний из которых является коэффициентом амортизации. Необходимо в форме предусмотреть новое текстовое поле, куда пользователь смог бы вводить коэффициент, а в коде нужно учесть присутствие этого коэффициента.
   В программе необходимо построить обработчик ошибок. Необходимость его создания обусловлена следующим фактором: если весь период эксплуатации составляет, к примеру, 120 месяцев, то невозможно вычислить амортизацию за 121 и т. д. месяцы. Таким образом, при некорректном вводе периода расчета амортизации должно появляться окно вывода с сообщением об ошибке и должен быть осуществлен новый ввод неверного параметра.
    Указание: выход из процедуры осуществляется командой Exit Sub.

Глава 8
Построение диаграмм средстами VBA

8.1. Построение гладких диаграмм

Диаграммы в Excel
   Диаграммы можно размещать на рабочем листе. Для этого используется коллекция chartobjects. Ее элементы – объекты класса chartobject – являются контейнерами, содержащими объект Chart, задающий непосредственно диаграмму.
    Методы объекта Chart
   Рассмотрим основные методы, определяющие новое поведение объекта Chart:
    SubChartWizard ([Source], [Gallery], [Format], [PlotBy], [CategoryLabels], [SeriesLabels], [HasLegend], [Title], [CategoryTitle], [ValueTitle], [Extra-Title])
   Этот метод позволяет построить или модифицировать существующую диаграмму. В отличие от мастера диаграмм (ChartWizard), который вызывается при построении диаграммы вручную, метод не является интерактивным, более того, он не позволяет задать все возможные свойства. С его помощью можно выполнить основную работу, а детали строятся с использованием других свойств и методов объекта Chart. Все параметры метода являются необязательными:
   1)  Source– объект Range, содержащий исходные данные для построения новой диаграммы. Если параметр опущен, то метод позволяет отредактировать существующую диаграмму – либо выделенную диаграмму рабочего листа, либо диаграмму активного листа диаграмм;
   2)  Gallery– задает тип диаграммы и может быть одной из следующих констант: xlArea, xlBar, xlColumn, xlLine, xlPie, xlRadar, xlXY-Scatter, xlCombination, xl3DArea, xl3DBar, xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut, или xlDefaultAutoFormat;
   3)  Format– задает формат для данного типа диаграммы. Каждому типу диаграммы соответствует некоторое число возможных форматов. Параметр задает номер формата, по умолчанию выбирается первый формат данного типа;
   4)  PlotBy– соответствует терминальному свойству PlotBy;
   5)  CategoryLabelsи SeriesLabels– целые, указывающие число строк или столбцов с метками категорий и рядов данных в области, заданной параметром Source. Указывать эти числа нужно на единицу меньше фактического значения;
   6) остальные параметры позволяют добавить легенду, задать название диаграммы и ее осей – они совпадают с соответствующими терминальными свойствами.
    Sub SetSourceData (source as range, [plotby]). Устанавливает источник данных диаграммы. Второй параметр соответствует терминальному свойству plotby.
    SubApplyCustomType(ChartTypeAsXlChartType, [typename]). Метод позволяет модифицировать диаграмму, применив к ней новый тип – стандартный или настраиваемый. Если этот тип стандартный, то тогда первый параметр полностью его определяет. Его возможные значения совпадают со значениями соответствующего терминального свойства charttype. Если же тип настраиваемый, то первый параметр должен иметь одно из следующих значений: xlbuiltin, xluserdefined или xlanygallery. В этом случае второй параметр задает имя типа диаграммы.
    Function Export (filename as string, [filtername], [interactive]) as boolean позволяет экспортировать диаграмму, преобразуя ее в графический формат. Первый параметр задает имя файла, в который будет записана диаграмма в графическом формате, второй – задает имя графического фильтра в том виде, как оно записано в системном регистре. Булев параметр interactive должен иметь значение true, если мы хотим вызвать диалоговое окно в процессе фильтрации. Функция export возвращает значение true в случае успешного завершения работы.
    Sub GetChartElement (x as long, y as long, elementid as long, argl as long, arg2 as long). Представьте себе, что пользователь щелкнул кнопку мыши где-то над диаграммой. Обработав это событие, можно получить координаты курсора мыши – x и y. Если теперь вызвать метод getchartelement с этими координатами, то он вернет значение параметра elementid – идентификатор элемента диаграммы и значения двух параметров, связанных с этим элементом. Конечно, параметры зависят от типа того элемента, чьи координаты x и y заданы.
    Function Location (where as xlchartlocation, [name]) as
   Chart. Передвигает диаграмму в новое местоположение. Параметр Where имеет следующие значения: xlLocationAsNewSheet, xlLocationAsObject или xlLocationAutomatic.
   В первом случае диаграмма помещается на новый лист диаграммы и параметр Name задает имя этого листа. Во втором случае диаграмма помещается как встроенный объект и Name задает имя рабочего листа.
Создание VBA-программы
    Пример 54. [6] По введенным в диалоговое окно «Построение графика» (рис. 102) начальным, конечным значениям аргументов и их шагам изменения строится график. Уравнение графика также вводится в программу из диалогового окна. Уравнение должно быть составлено в соответствии с правилами, по которым строятся функции рабочего листа, но в качестве аргументов в нем следует использовать хвместо ссылки на ячейку. Программа сама переведет аргумент в ссылку на ячейку. После табуляции введенной функции программой и построения поверхности на рабочем листе (рис. 103) этот график также отображается в объекте управления Image, расположенном в диалоговом окне Построение графика(рис. 102).
    Технология выполнения
   Обсудим, как приведенная ниже программа решает описанную задачу и что происходит в ней.
 
    Рис. 102.Диалоговое окно «Построение графика» в рабочем состоянии (пример 54)
 
    Рис. 103.Результат построения графика на рабочем листе (пример 54)
 
    UserForm_Initialize
   1. Активизирует диалоговое окно.
   2. Назначает клавише <Esc> функцию кнопки Отмена,а клавише <Enter> – построение.
   3. Устанавливает, чтобы отображаемая картинка графика в диалоговом окне помещалась целиком и пропорционально в пределах элемента управления Image, а также чтобы левый верхний угол рисунка совпадал с левым верхним углом элемента управления Image.
    Нажатие кнопки Построение запускает на выполнение процедуру CommandButton1__C1ick
   1. Проверяет, являются ли вводимые данные числами. В случае ошибки отображается соответствующее сообщение.
   2. Проверяет согласованность вводимых данных. В случае ошибки отображается соответствующее сообщение (рис. 104).
   3. Преобразует формулу, введенную в поле Уравнение графика, в формулу рабочего листа.
   4. Проверяет корректность введенной формулы. В случае ошибки отображается соответствующее сообщение (рис. 105).
   5. Используя метод DataSeries, начиная с ячейки А2, строит вниз по столбцу арифметическую прогрессию, являющуюся результатом табуляции аргумента х уравнения графика с указанными шагами (рисунок из файла graph.jpg в элементе управления Image1).
 
    Рис. 104.Пример сообщения о несогласованности данных
 
    Рис. 105.Сообщение о некорректном вводе формулы
    Нажатие кнопки Отмена запускает на выполнение процедуру CommandButton2_C1ick
   Закрывает диалоговое окно.