Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2011, 06:07   #1
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию Модуль VB

Помогите пожалуйста, написал модуль для введения новых функций в Excel, который пересчитывает из одной координатной системы в другую
Код:
Const pi As Double = 3.14159265358979
Const X1 As Double = 1444.02
Const Y1 As Double = -2105.91
Const A1 As Double = 6400000
Const B1 As Double = 576000
Const X2 As Double = 1741.74
Const Y2 As Double = -2255.49
Const A2 As Double = 6470000
Const B2 As Double = 576000

Function Arccos(x) As Double

Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)

End Function

Function Coordx(Xn, Yn) As Double

Dim S1, S2, Q1, Q2, D, dA, dB, dX, dY As Double

S1 = Sqr((A2 - A1) ^ 2 + (B2 - B1) ^ 2)
S2 = Sqr((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
If B2 - B1 < 0 Then
Q1 = 2 * pi - (Arccos((A2 - A1) / S1))
Q2 = 2 * pi - (Arccos((X2 - X1) / S1))
Else
Q1 = Arccos((A2 - A1) / S1)
Q2 = Arccos((X2 - X1) / S1)
End If
D = Q1 - Q2
dA = Xn - X1
dB = Yn - Y1
dX = dA * Cos(D) - dB * Sin(D)
dY = dA * Sin(D) + dB * Cos(D)
Coordx = A1 + dX
End Function

Function Coordy(Xn, Yn) As Double

Dim S1, S2, Q1, Q2, D, dA, dB, dX, dY As Double

S1 = Sqr((A2 - A1) ^ 2 + (B2 - B1) ^ 2)
S2 = Sqr((X2 - X1) ^ 2 + (Y2 - Y1) ^ 2)
If B2 - B1 < 0 Then
Q1 = 2 * pi - (Arccos((A2 - A1) / S1))
Q2 = 2 * pi - (Arccos((X2 - X1) / S1))
Else
Q1 = Arccos((A2 - A1) / S1)
Q2 = Arccos((X2 - X1) / S1)
End If
D = Q1 - Q2
dA = Xn - X1
dB = Yn - Y1
dX = dA * Cos(D) - dB * Sin(D)
dY = dA * Sin(D) + dB * Cos(D)
Coordy = B1 + dY
End Function
Но работать он почему то не хочет. В функциях код повторяется, можно ли как то это всё организовать в подпрограмму? И можно ли заменить функцию арккосинуса на процедуру, чтобы в Excel она не была видна?
Ужас, как я устал от тупизны...

Последний раз редактировалось rainbow; 19.07.2011 в 18:44.
rainbow вне форума Ответить с цитированием
Старый 19.07.2011, 06:14   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Но работать он почему то не хочет
Весь этот код надо просто вставить в стандартный модуль - и всё будет работать.

Цитата:
В функциях код повторяется, можно ли как то это всё организовать в подпрограмму?
Всего 2 функции - поэтому не вижу смысла оптимизировать.
Было бы 20 или 200 функций - тогда, конечно, имело бы смысл.

Цитата:
И можно ли заменить функцию арккосинуса на процедуру, чтобы в Excel она не была видна?
А какой смысл скрывать эту функцию?
Ну переименуйте её, к примеру.
Или скройте все формулы на листе.
EducatedFool вне форума Ответить с цитированием
Старый 19.07.2011, 06:21   #3
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Весь этот код надо просто вставить в стандартный модуль - и всё будет работать.
Работать в Excel он не хочет
Выдает следующую ошибку

PS. Нашел ошибки в формулах, аркосинус вычисляется так, Arccos((X2G - X1G) / SG1), и не объявил кое какие переменные и контанту pi, переписал модуль с нуля, всё заработало, код выложил в первом посте.
Ужас, как я устал от тупизны...

Последний раз редактировалось rainbow; 19.07.2011 в 08:26.
rainbow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль samuelfs Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2010 01:46
Типизированные файлы, модуль Crt, Модуль Graph Kate_Fleur Помощь студентам 1 06.05.2010 17:43
Модуль Кссер Помощь студентам 1 18.04.2010 21:42
модуль romich.91 Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2009 20:27
Модуль ponchikpk Паскаль, Turbo Pascal, PascalABC.NET 6 15.05.2009 11:14