2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Передача параметров в процедуре Visual Basic
Сообщение24.02.2017, 15:03 
Аватара пользователя


23/07/07
164
Возникла необходимость написать макрос в 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 
Заслуженный участник


27/04/09
28128
А 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 
Аватара пользователя


23/07/07
164
Спасибо большое за отзывчивость! Я уже сам разобрался в проблеме. Совершенно не являюсь специалистом по программированию, но методом "научного тыка" понял, что нужно отдельно объявлять каждую переменную
Используется синтаксис Visual Basic
Dim C As Double
Dim S As Double

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group