![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Технология выполнения. Обсудим, как приведенная ниже программа решает описанную задачу и что происходит в ней.
Обсудим, как приведенная ниже программа решает описанную задачу и что происходит в ней.
Рис. 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 Закрывает диалоговое окно. Рассмотрим листинг данного приложения. Private Sub CommandButton1_Click() ' Процедура табуляции функции Dim х_нз As Double Dim х_пз As Double Dim х_шаг As Double Dim УрГрафика As String DimNx As Integer 'nx – число протабулированных значений аргумента х DimNAs Integer Dim i As Integer 'n, i – вспомогательные целые переменные 'Проверка корректности ввода данных If IsNumeric(TextBox2.Text) = False Then MsgBox «Ошибка в начальном значении х», vbInformation, «График» TextBox2.SetFocus Exit Sub End If If IsNumeric(TextBox3.Text) = False Then MsgBox «Ошибка в шаге х», vbInformation, «График» TextBox3.SetFocus Exit Sub End If If IsNumeric(TextBox4.Text) = False Then MsgBox «Ошибка в конечном значении у», vbInformation, «График» TextBox4.SetFocus Exit Sub End If 'Считывание с диалогового окна значений переменных х_нз = CDbl(TextBox2.Text) х_шаг = CDbl(TextBox3.Text) х_пз = CDbl(TextBox4.Text) УрГрафика = Trim(TextBox1.Text) 'Проверка согласованности введенных данных If х_нз > = х_пз Then MsgBox «Начальное значение х слишком большое», vbInformation, «График» TextBox2.SetFocus Exit Sub End If If х_нз + х_шаг > = х_пз Then MsgBox «Шаг х великоват», vbInformation, «График» TextBox3.SetFocus Exit Sub End If 'Замена в введенной формуле аргумента х на ссылку $A1 i = 1 Do 'Замена в введенной формуле аргумента х на ссылку $A1 If Mid(УрГрафика, i, 1) = «x» Or Mid(УрГрафика, i, 1) = «X» Then N= Len(УрГрафика) If (1 < i) And (i < N) Then УрГрафика = Left(УрГрафика, i – 1) & «$A1» & Right(УрГрафика, N– i) End If If i = 1 Then УрГрафика = «$A1» & Right(УрГрафика, N– 1) End If If i =NThen УрГрафика = Left(УрГрафика, N– 1) & «$A1» End If End If i = i + 1 Loop While i < = Len(УрГрафика) ActiveSheet.Cells.Select Selection.Clear 'Очистка на активном листе ранее введенных данных ActiveSheet.Range(«A1»).Select 'Заполнение диапазонов значениями аргумента With ActiveSheet Range(«A1»).Value = х_нз 'Ввод в ячейку A1 начального значения 'Создание арифметической прогрессии по столбцу с указанным шагом и начальным значением Range(«A1»).DataSeries Rowcol: =xlColumns, Type: =xlLinear, Step: =х_шаг, Stop: =х_пз, Trend: =False End With 'Заполнение диапазона значениями функции With ActiveSheet nx = Range(«A1»).CurrentRegion.Rows.Count 'Определение числа строк в диапазоне заполнения Range(«B1»).FormulaLocal = УрГрафика 'Ввод уравнения поверхности в ячейку B1 If IsError(Evaluate(УрГрафика)) = True Then MsgBox «Ошибка в формуле», vbExclamation, «График» Exit Sub End If 'Заполнение диапазона Range(Cells(1, 2), Cells(nx, 2)) 'начиная с ячейки B1, что эквивалентно протаскиванию маркера 'заполнения ячейки B1 на диапазон Range(Cells(1, 2), Cells(nx, 2)) Range(«B1»).AutoFill Destination: =Range(Cells(1, 2), Cells(nx, 2)), Type: =xlFillDefault End With ActiveSheet.ChartObjects.Delete 'Удаление с рабочего листа всех ранее построенных диаграмм ActiveSheet.Range(Cells(1, 2), Cells(nx, 2)).Select 'Выбор диапазона, по которому строится график ActiveSheet.ChartObjects.Add(20, 19.5, 192, 192).Select 'Задание и выбор области на рабочем листе, где будет построен график, 'размер графика должен соответствовать размеру объекта Image1 Application.CutCopyMode = False 'Построение графика ActiveChart.ChartWizard Source: =Range(Cells(1, 1), Cells(nx, 2)), Gallery: =xlLine, Format: =2, PlotBy: =xlColumns, CategoryLabels: =1, SeriesLabels: =0, HasLegend: =False, Title: =" График", CategoryTitle: =" Аргумент", ValueTitle: =" Функция y" & TextBox1.Text ActiveSheet.ChartObjects(1).Activate ActiveChart.Axes(xlValue).AxisTitle.Select With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter OrientatioN= xlUpward End With 'Запись диаграммы в файл и загрузка картинки в Imagel ActiveChart.Export Filename: =" Graph.jpg", FilterName: =" JPEG" UserForm1.Image1.Picture = LoadPicture(«graph.jpg») ActiveSheet.Range(«A1»).Select End Sub Private Sub CommandButton2 Click() 'Процедура закрытия диалогового окна UserForm1.Hide End Sub Private Sub UserForm Initialize() 'Рисунок масштабируется с учетом относительных размеров так, чтобы он помещался в объекте Imagel With Imagel PictureAlignment = fmPictureAlignmentTopLeft PictureSizeMode = fmPictureSizeModeStretch End With End Sub
|