Помогите с макросом в Excel

программирование VBA

На лекции выдали такой код программы:

Option Explicit
Dim L As Single, q As Single, P As Single, Iviv As Integer
Sub Balka()
Dim N As Integer, Xopt As Single, X As Single, Mmax As Single
Call Ввод_Balka(L, q, P, N)
Call мет_прям_переб(0.5 * L, L, N, Xopt, Mmax) //По условию Хмин=0,5*L Xmax=L
Worksheets("Лист1").Range("E16") = Xopt
Worksheets("Лист1").Range("E17") = Mmax
End Sub
Sub Ввод_Balka(L, q, P, N)
L = Worksheets("Лист1").Range("E12")
q = Worksheets("Лист1").Range("E13")
P = Worksheets("Лист1").Range("E14")
N = 20
Iviv = 20
End Sub
Sub мет_прям_переб(Xmin, Xmax, N, Xopt, Yo)
Dim Y As Single
Yo = 10000000000#
X = Xmin // В этой строке выдает ошибку Variable not defined
dx = (Xmax - Xmin) / N
For X = Xmin To Xmax Step dx
Y = Fx(X) // Ошибка №2
If Y < Yo Then
Yo = Y
Xopt = X
End If
Next X
End Sub
Function Fx(X As Single) As Single
Dim z As Single, Ra As Single, Mz As Single, Mmax As Single
Ra = (q * X ^ 2 / 2 - q * (L - X) ^ 2 / 2 - P * (L - X)) / X
Mmax = 0
For z = 0 To X Step 0.01 * L
Mz = Ra * z - q * z ^ 2 / 2
If Abs(Mz) > Mmax Then Mmax = Abs(Mz)
Next z
Fx = Mmax
Worksheets("Лист1").Cells(Iviv, 1) = X
Worksheets("Лист1").Cells(Iviv, 2) = Mmax
Iviv = Iviv + 1
End Function

Если добавить dim Х и dx в Sub Balka() как single, то дальше возникает ошибка номер 2.
ByRef argument type mismatch
Ответы:
Sub мет_прям_переб(Xmin, Xmax, N, Xopt, Yo)
  Dim Y As Single
  Dim X As Single
  Dim dx
  Yo = 10000000000#
  X = Xmin                                       'В этой строке выдает ошибку больше не выдает
  dx = (Xmax - Xmin) / N
  For X = Xmin To Xmax Step dx
  Y = Fx(X)                                      'Ошибка №2 отсутствует
  If Y < Yo Then
  Yo = Y
  Xopt = X
  End If
  Next X
End Sub


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.