Здравствуйте.
Мне нужно использовать следующие данные, но у меня происходит ошибка:
Уравнение: =2*x*ln(x)
Начальное значение: 0,2
Шаг: 0,2
Конечное: 5,2
[вложение удалено администратором]
Код для UserForm:
Код
Private Sub UserForm_Initialize()
With Image1
.PictureAlignment = fmPictureAlignmentTopLeft
.PictureSizeMode = fmPictureSizeModeStretch
End With
End Sub
Private Sub CommandButton1_Click()
Dim x_nz As Double
Dim x_pz As Double
Dim x_shag As Double
Dim uravnenie As String
Dim nx As Integer
Dim i As Integer
'1. Проверка, что юзер ввёл числа в текстбоксы формы.
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
'2. Копирование данных из формы в переменные. Это нужно по двум причинам:
'1) с переменными макрос быстрее работает, чем с объектами;
'2) удобнее читать и писать код.
x_nz = CDbl(TextBox2.Text)
x_shag = CDbl(TextBox3.Text)
x_pz = CDbl(TextBox4.Text)
uravnenie = Trim(TextBox1.Text)
'3. Проверки.
If x_nz >= x_pz Then
MsgBox "Начальное значение х слишком большое", vbInformation, "Построение графика"
TextBox2.SetFocus
Exit Sub
End If
If x_nz + x_shag >= x_pz Then
MsgBox "Шаг х слишком большой", vbInformation, "Построение графика"
TextBox3.SetFocus
Exit Sub
End If
'4. Замена x на адрес эксель-ячейки A1.
' vbTextCompare - чтобы функция "Replace" заменяла и меленькую и большую "x".
uravnenie = Replace(uravnenie, "x", "A1", , , vbTextCompare)
'5. Очистка эксель-листа от старых данных.
Cells.Clear
'6. Вставка на эксель-лист данных из формы в столбец A.
Range("A1").Value = x_nz
Range("A1").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=x_shag, Stop:=x_pz, Trend:=False
'7. Проверка формулы. Проверяется именно здесь после того, как были вставлены данные в столбец A.
' Иначе может быть ошибка "Деление на ноль". Но здесь есть нестыковка: при некоторых значениях
' (например, когда будет деление на ноль), будет ошибка, а при других нет. Поэтому
' по такой проверке нельзя сказать, правильная формула или нет.
If IsError(Evaluate(uravnenie)) = True Then
MsgBox "Ошибка в формуле", vbInformation, "Построение графика"
Exit Sub
End If
'8. Вставка формулы из формы в столбец B.
nx = Range("A1").CurrentRegion.Rows.Count
Range("B1:B" & nx).FormulaLocal = uravnenie
'9. Вставка диаграммы на эксель-лист.
ActiveSheet.ChartObjects.Add(20, 19.5, 192, 192).Select
'10. Очистка в столбце B ячеек, в которых не числа. Не понятно, почему такое может быть.
' Может быть там эксель-ошибки. Но тогда проверка правильности формулы имеет ли смысл?
For i = 1 To nx
If IsNumeric(Cells(i, 2)) = False Then
Cells(i, 2) = ""
End If
Next i
'11. Построение диаграммы.
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
'12. Настройка надписи оси Y.
ActiveChart.Axes(xlValue).AxisTitle.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = xlUpward
End With
'13. Копирование диаграммы в форму в объект "Image".
ActiveChart.Export Filename:="Graph.jpg", FilterName:="JPEG"
UserForm1.Image1.Picture = LoadPicture("graph.jpg")
' Удаление временного файла.
Kill "graph.jpg"
'14. Просто выделение ячейки A1. Для удобства юзера, наверное.
Range("A1").Select
End Sub
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
Все работает отлажено и эстетично, со своими ошибками разобрался, спасибо огромное!