VBA: ошибка в строке с синусом (sin)

Автор Dyu, 18 декабря 2016, 16:54

Dyu

Добрый день, само задание: Задано аналитическое выражение для некоторой функции 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

Dyu

Спасибо, теперь с синусом всё в порядке..
Но программа всё равно не работает. Ошибка: Run time error '9'.

Администратор


Dyu

Не выделяет строку

[вложение удалено администратором]

Администратор

Листа "Форма" может нет?

Если жёлтым не выделяет (такое происходит если код в форме), то поставьте красную точку (точку остановки в первую строку процедуры "Private Sub CommandButton1_Click()".
Затем запустите форму и щёлкните по кнопке. Макрос остановится возле красной точки. Затем нажимайте F8 и макрос будет двигаться по строкам. На какой строке произойдёт ошибка, значит здесь ошибка.

Dyu

лист "Форма" есть

[вложение удалено администратором]

Администратор

Удалите эти две строки, т.к. они не используются:
Dim Форма As Object
Set Форма = Sheets("Форма")

Если ошибка останется, то вставьте изменённый код в новое сообщение.

Dyu

Теперь работает, спасибо!
Вот только еще вопрос.
Аргумент же должен изменяться от 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 (она сверху) и посмотрите, что в этой переменной.

Dyu

0,1428571

[вложение удалено администратором]

Администратор

Дальше нажимайте F8 и смотрите, что в переменной x, также наводя курсор. Правильно там?

Dyu

если несколько раз подряд нажать f8, то сначала x=0, потом 0,2; 0,4; 0,6...

Администратор

Увидел ошибку: у переменных a и b тип данных Integer, это означает, что в переменных могут быть только целые числа.
Используйте тип данных Single, как у остальных переменных.
Вообще Single уже не используется в программировании, вместо него Double. И сам эксель тоже использует Double.

Dyu

Да, спасибо, написал double.
Теперь предпоследнее значение, как и положено 0,85, а последнее еще какое-то и так при разных количествах интервалов

[вложение удалено администратором]