Добрый день, само задание: Задано аналитическое выражение для некоторой функции f(x). Создайте форму для получения таблицы значений функции f(x) при n значениях аргумента x, изменяющегося от начального значения a до конечного значения b с постоянным шагом dx=(b – a)/(n – 1)
Функция: (1/(3+sin(3,6x)))-x
отрезок [a, b] = [0;0,85]
Значение f(a) = 0,3333333
Создана форма, кнопка в Экселе для вызова формы. Написана программа. Но она выдает ошибку.
Ошибка: wrong number of arguments or invalid property assignment (выделяет синус)
Подскажите, пожалуйста, как исправить эту ошибку?
И правильно ли вообще написана программа?
Код
Private Sub CommandButton1_Click()
Dim Форма As Object
Dim i As Integer
Set Форма = Sheets("Форма")
Dim a As Integer, b As Integer, f As Single, x As Single
Dim n As Integer, dx As Single
a = TextBox1
b = TextBox2
n = TextBox3
x = a
dx = (b - a) / (n - 1)
For i = 1 To n + 1
Worksheets("Форма").Cells(i, 1) = x
f = (1 / (3 + Sin(3, 6 * x))) - x
Worksheets("Форма").Cells(i, 2) = f
x = x + dx
Next
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub UserForm_Click()
End Sub
[вложение удалено администратором]
В коде дробные числа нужно писать с точкой: 3.6
Спасибо, теперь с синусом всё в порядке..
Но программа всё равно не работает. Ошибка: Run time error '9'.
В какой строке кода ошибка?
Не выделяет строку
[вложение удалено администратором]
Листа "Форма" может нет?
Если жёлтым не выделяет (такое происходит если код в форме), то поставьте красную точку (точку остановки в первую строку процедуры "Private Sub CommandButton1_Click()".
Затем запустите форму и щёлкните по кнопке. Макрос остановится возле красной точки. Затем нажимайте F8 и макрос будет двигаться по строкам. На какой строке произойдёт ошибка, значит здесь ошибка.
лист "Форма" есть
[вложение удалено администратором]
Удалите эти две строки, т.к. они не используются:
Dim Форма As Object
Set Форма = Sheets("Форма")
Если ошибка останется, то вставьте изменённый код в новое сообщение.
Теперь работает, спасибо!
Вот только еще вопрос.
Аргумент же должен изменяться от 0 до 0,85, а изменяется до других чисел.
Текст программы:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim a As Integer, b As Integer, f As Single, x As Single
Dim n As Integer, dx As Single
a = TextBox1
b = TextBox2
n = TextBox3
x = a
dx = (b - a) / (n - 1)
For i = 1 To n + 1
Worksheets("Форма").Cells(i + 1, 1) = x
f = (1 / (3 + Sin(3.6 * x))) - x
Worksheets("Форма").Cells(i + 1, 2) = f
x = x + dx
Next
End Sub
Прикрепляю ещё скрин работы.
[вложение удалено администратором]
Поставьте точку остановки в строку:
For i = 1 To n + 1
затем, когда код дойдёт до этой строки, наведите курсор на dx (она сверху) и посмотрите, что в этой переменной.
0,1428571
[вложение удалено администратором]
Дальше нажимайте F8 и смотрите, что в переменной x, также наводя курсор. Правильно там?
если несколько раз подряд нажать f8, то сначала x=0, потом 0,2; 0,4; 0,6...
Увидел ошибку: у переменных a и b тип данных Integer, это означает, что в переменных могут быть только целые числа.
Используйте тип данных Single, как у остальных переменных.
Вообще Single уже не используется в программировании, вместо него Double. И сам эксель тоже использует Double.
Да, спасибо, написал double.
Теперь предпоследнее значение, как и положено 0,85, а последнее еще какое-то и так при разных количествах интервалов
[вложение удалено администратором]
Вместо этого:
For i = 1 To n + 1
сделайте так:
For i = 1 To n
Спасибо огромное! Всё верно!