Как в Excel объявить функцию глобально?

Программирование на Visual Basic for Applications
Sneaky Pete
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 24.08.2006 (Чт) 21:56

Как в Excel объявить функцию глобально?

Сообщение Sneaky Pete » 24.08.2006 (Чт) 22:01

Сосбсвенно, есть функция каторую хочется вызывать методом call
из разных листов и форм.
Я ее добавляю в ThisWorkBook General , затем вызываю из других листов - пишет ошибку - функция неопределена. sub or function not defined

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2006 (Чт) 22:07

Собственно, метод call, являющийся наследнием не пойми чего, я никогда не понимал.

А что, в модуль поместить функцию никак нельзя совсем?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sneaky Pete
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 24.08.2006 (Чт) 21:56

Сообщение Sneaky Pete » 24.08.2006 (Чт) 22:33

Собсвенно как выполнить функцию я понял...
call thisworkbook.function_name
А вот как передать из нее значение, в модуль, откуда она была вызвана мне не понятно.
Проше говоря...

Есть функция, мы ее вызываем.. она отрабатывает и должна вернуть значение, например число... и вот как это значение получить после вызова ?

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 0:45

Как сказал ГСерг, поместить функцию в тот же модуль.
А вообще если ты определишь переменные в модуле класса и поставишь туда функцию, а потом будешь отдельно запускать только другие модули или формы, не запустив модуль класса, то функция не будет работать.
'Til the blood on your hans is the blood of the King!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.08.2006 (Пт) 0:47

Bagathur
Очень сложно в excel не запустить модуль класса thisworkbook...
У меня ни разу не получилось...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 25.08.2006 (Пт) 1:57

Я говорю про то, что у меня было, а именно
Код: Выделить всё
Public dirsave, projname, projpath As String
Public i, j, s, r, As Integer

Public Sub auto_open()
projpath = ActiveWorkbook.path
projname = ActiveWorkbook.Name
dirsave = ActiveWorkbook.Sheets(1).Cells(100, 5).Value
(...)

Было там, где "невозможно пропустить", да ещё и с автораном.
При открывании книги всё было ОК, значения переменным присваивались, по модулям передавались, в формы выводились и тп
Но при выходе из выполнения кода и попытке отладки-настройки его отдельных элементов и форм значения публично объявлённых переменных скидывались и процедуры начинали ругаться.
Мб я что-то не так делал и ты подскажешь, как этого избегать кроме дублирования строк присвоения значения публичным переменным в отлаживаемой процедуре?
'Til the blood on your hans is the blood of the King!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 25.08.2006 (Пт) 2:46

Привет Bagathur,
Bagathur писал(а):...поместить функцию в тот же модуль...

Думаю, что речь не о том же модуле, а о стандартном модуле, т.е. не модуле класса (в т.ч. ThisWorkbook). Достаточно поместить функцию в модуль типа Модуль1 и вызывай откуда хочешь как любую другую.
Но в принцыпе можно и то, о чем говорит Sneaky Pete, напр.:
в модуле ThisWorkbook:
Код: Выделить всё
Function MyFunction(txt As String) As Long
    MyFunction = Len(txt)
End Function

в любом другом модуле:
Код: Выделить всё
Sub test()
    MsgBox ThisWorkbook.MyFunction("abracadabra")
End Sub

И не нужен никакой Call
Привет,
KL


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот и гости: 55

    TopList