2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Передача параметров в процедуре Visual Basic
Сообщение24.02.2017, 15:03 
Аватара пользователя
Возникла необходимость написать макрос в Excel. Ниже приведён код на Visual Basic, который носит демонстративный характер (в реальности начинка другая).
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub Math(ByVal x As Double, ByRef CS As Double, ByRef SS As Double)
        CS=Cos(x)
        SS=Sin(x)
End Sub
Function MathC(x As Double) As Double
Dim C, S As Double
        Math(x,C,S)
        MathC=C
End Function
Function MathS(x As Double) As Double
Dim C, S As Double
        Math(x,C,S)
        MathS=S
End Function
 

Вызываю функцию MathC(x) - выдаёт нулевые значения вне зависимости от аргумента. Вызываю MathS(x) - всё отлично работает. Не пойму где ошибка в передаче параметров. Подскажите, пожалуйста, где "собака зарыта"?

 
 
 
 Re: Передача параметров в процедуре Visual Basic
Сообщение24.02.2017, 17:33 
А Dim C, S As Double — точно то же самое, что Dim C As Double, S As Double?

-- Пт фев 24, 2017 19:48:57 --

Из справки по VBA из Office 2007:

Используется синтаксис Visual Basic
' Multiple declarations on a single line. AnotherVar is of type Variant
' because its type is omitted.
Dim AnotherVar, Choice As Boolean, BirthDate As Date

Т. е. не то же самое. У меня в экселе ваш код вообще пока не компилируется — ошибки компиляции в строках с вызовом Math. Пока не пойму, какие именно.

-- Пт фев 24, 2017 20:02:30 --

Виной были скобки: надо или Call Math(x, C, S), или Math x, C, S.

Потом, когда я убрал As Double из определения C (дописал это до исправления ошибки с вызовом Math), возникла ошибка несовпадения типов аргумента, передаваемого по ссылке. Непонятно, в какой версии Excel этот код вообще работает, если это всё-таки VBA.

 
 
 
 Re: Передача параметров в процедуре Visual Basic
Сообщение24.02.2017, 21:30 
Аватара пользователя
Спасибо большое за отзывчивость! Я уже сам разобрался в проблеме. Совершенно не являюсь специалистом по программированию, но методом "научного тыка" понял, что нужно отдельно объявлять каждую переменную
Используется синтаксис Visual Basic
Dim C As Double
Dim S As Double

и всё заработало.

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group