Страницы: 1
RSS
Вызов функции из другого модуля
 
Добрый день! Подскажите есть Модуль 1, Есть Модуль 2, как вызвать с Модуля 1 функцию из модуля 2?
 
А "обычным" способом разве не вызывается?
 
Call модуль1.функция 1 процедура не выполнется
 
А зачем вызывать (Call) модуль? Просто вызывайте саму функцию. Call - это мы вызываем процедуру.
 
Извините я немного запутался в формулировке вопроса. В итоге мне нужно вызвать процедуру
Изменено: bulgakov - 10.01.2016 09:06:42
 
Доброе время суток
Странно, что модератор не отправил вас почитать правила про пример. Так на "пальцах показывать" ещё долго можно - что не вызывает, почему пишется функция и одновременно упоминается процедура.
 
Разные модули могут содержать одинаковые названия процедур. В таких случаях, чтобы не было неясностей, указывают модуль. Но также читабельно указывать модуль, когда большой проект и много модулей.
Код
'Module1
Sub MyProc()
End Sub

'Module2
Sub MyProc()
End Sub

'Module3
Sub F()
    Call MyProc '=> Ошибка
    Call Module1.MyProc '=> OK
End Sub
There is no knowledge that is not power
 
СуперКот прав. Но, если имена процедур разные, то достаточно просто Call MyProc без указания модуля.
P.S. Если бы Вы сразу (и в названии темы тоже) не упоминали про функции - вопрос был бы решён первым же ответом.
 
Цитата
Разные модули могут содержать одинаковые названия процедур... чтобы не было неясностей...
Не нужно именовать процедуры в одном проекте одинаково. Избежите многих неясностей )
 
Цитата
vikttur написал:
Не нужно именовать процедуры в одном проекте одинаково. Избежите многих неясностей )
Это всё понятно. Но я не раз видел подобное, поэтому в целях предупреждения и написал. Да и вообще - в целях читабельности указание модуля разъясняет, где находится процедура (хотя я сам это делаю редко и пользуюсь Go To Definition ).
There is no knowledge that is not power
 
Кот, от души :))
Извините за албанский вопрос, а чем отличается процедура от функции?
 
Цитата
bulgakov написал: а чем отличается процедура от функции?
А не пробовали Google или Yandex спросить? Или почитать на этом сайте Создание макросов и пользовательских функций на VBA
 
Цитата
bulgakov написал: а чем отличается процедура от функции
Вообще процедура это та же функция, только без возможности возвращения значения.
В VBA по сути ничем не отличаются в работе кроме озвученного выше и кроме того, что функцию можно так же вызвать непосредственно с листа.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Андрей VG, цитата не для ответа)) а вы побывали не умничать? А по человески ответить. Читал по ссылкам поиска, не могу понять что там пишут. Тут же люди объясняют на доступном языке! А так все спасибо, ценю ваше время и знания. Ещё раз спасибо.
 
Цитата
bulgakov написал: Андрей VG... а вы побывали не умничать?
А никто и не умничает: Андрей дал Вам ссылку, где есть ответ на Ваш вопрос - чем отличается процедура от функции?
Или он должен был скопировать ответ и повторить его в этой теме?
 
Юрий М, вы заблуждаитесь. Думаю любой человек прежде чем дожидаться  ответа на форуме воспользуется поиском, а после задаст вопрос на форуме.
 
Процедуру (Sub) можно использовать и как функцию. Например (нахождение расширения файла):
Код
Sub GetWorkbookExtension(sWorkbookPath As String, ByRef sExtension As String)
    'Находим расширение файла
    Dim i
    For i = Len(sWorkbookPath) To 1 Step -1
        If Mid$(sWorkbookPath, i, 1) = "." Then
            sExtension = Right$(sWorkbookPath, Len(sWorkbookPath) - i)
            Exit For
        End If
    Next
End Sub

Sub TestSubAsFunc()
    Dim sExt As String
    'Используем процедуру как функцию
    Call GetWorkbookExtension(ThisWorkbook.FullName, sExt)
    If Len(sExt) = 0 Then
        MsgBox "Расширение файла не найдено"
    Else
        MsgBox "Расширение файла: " & sExt
    End If
End Sub
There is no knowledge that is not power
 
Цитата
bulgakov написал: Юрий М, вы заблуждаитесь
И в чём моё заблуждение? Андрей дал неверную ссылку?
 
Цитата
bulgakov написал: цитата не для ответа)) а вы побывали не умничать?
Итак. Да, ссылка не дает явного краткого ответа на процитированный вопрос. Но Вы не пробовали быть вежливей? Никто не умничал - Андрей очевидно посчитал, что ссылка Вам может помочь, исходя из вопроса во главе темы. И я даже соглашусь с ним - Вам бы сначала хотя бы это освоить, а все остальное это нюансы, которые на данном этапе способны лишь запутать.
Цитата
bulgakov написал: Думаю любой человек прежде чем дожидаться  ответа на форуме воспользуется поиском
неправильно думаете. Да, так было бы в идеале и мы сами хотели бы, чтобы это было так. Но на практике так поступает максимум 10% от всей массы новичков(да и не только новичков, кстати). Так что если не владеете статистикой и мало еще знакомы со всеми нюансами и прелестями на форуме - лучше воздержитесь от подобного категоризма в оправдание своих резких высказываний. Будьте вежливы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: Да, ссылка не дает явного краткого ответа на процитированный вопрос.
Дим, почему не даёт?
Цитата
UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
 
Юра, функция и функция пользователя - разные вещи. А в статье сравнение идет именно с ними, а не с функцией и процедурой.
Непосредственно функция тоже может работать и с ячейками, и с листами и со всем, с чем может работать процедура. Главное как эта функция применяется. При вызове листа как UDF - да, не будет такая функция работать с упомянутыми объектами на полную. Но при вызове из другой процедуры - легко.
Поэтому статья и не дает явного ответа именно на поставленный вопрос.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Не понял, почему "только с теми значениями, которые мы передадим ей как аргументы"? А что - с объектами нельзя контактировать? Чем не UDF?
Код
Function HowManyPointsInSeries()
    HowManyPointsInSeries = Sheet1.ChartObjects(1).Chart.SeriesCollection(1).Points.Count
End Function
There is no knowledge that is not power
 
Уважаемые участники форума, если вы в моих словах усмотрели не уважение к вам, то вы глубоко ошбибаетесь.  Задал тут вопрос, т.к. только здесь можно получить максимально развёрнутый ответ. Без обид. Всем мирного неба над головой,  и жвачкек. Кот от души, спасибо!
 
Видимо, Николай просто упростил описание. Потому как даже из UDF доступны все объекты как минимум на чтение. А вот изменять UDF может далеко не все.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх