Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение примеры по VBA.doc
Скачиваний:
13
Добавлен:
22.09.2019
Размер:
1.99 Mб
Скачать

Создание vba-программы

       Пример 54. По введенным в диалоговое окно «Построение графика» (рис. 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       Закрывает диалоговое окно.       Рассмотрим листинг данного приложения.       Private Sub CommandButton1_Click()       ' Процедура табуляции функции       Dim х_нз As Double       Dim х_пз As Double       Dim х_шаг As Double       Dim УрГрафика As String       Dim nx As Integer       'nx – число протабулированных значений аргумента х       Dim n As 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 = n Then       УрГрафика = 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()

 Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

'Рисунок масштабируется с учетом относительных размеров       так, чтобы он помещался в объекте Imagel       With Imagel       PictureAlignment = fmPictureAlignmentTopLeft       PictureSizeMode = fmPictureSizeModeStretch       End With       End Sub