Страницы: 1
RSS
Вызвать макросом функцию или процедуру
 
Читаю документацию и никак не могу понять, можно ли в VBA писать "внешние" функции на подобии, например,
Код
void functionName() {
}
и
Код
int functionName() {
}
в "плюсах"?

Порой в коде попадаются одинаковые куски, хотелось бы это дело оптимизировать. Попробовал запихнуть кусок кода в отдельный модуль, но не понимаю, как к нему обращаться, да может это и невозможно вовсе.
 
Можно писать функции и обращаться к ним из разных процедур (в т.ч. из процедур других модулей и даже с листа), можно использовать подпрограммы для использования из разных мест в одной процедуре. Можно запускать обычные процедуры из других процедур. Все зависит от задачи.
Покажите в файле Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
 
Цитата
somebox написал:
попадаются одинаковые куски, хотелось бы это дело оптимизировать
Тут, собственно, сложностей никаких.
Цитата
somebox написал:
можно ли в VBA писать "внешние" функции на подобии, например,
Откройте краткий курс С++??, и растолкуйте, что все нижеследующее означает
 
Вроде разобрался сам с горем пополам.

Цитата
RAN написал:
растолкуйте, что все нижеследующее означает
Для кого?
 
Тему создали - поделитесь решением. Тема остается.
 
Создал модуль, в него добавил Sub с аргументами и нужным мне куском кода:
Код
Sub SomeSubCode(i As Integer, x As Integer, firstRow As Range, SourceRange As Range)
     ...working code...
End Sub

Затем в основном коде вызвал Sub:
Код
SomeSubCode 0, 3, RowForInsertValue, EnvUsedRange
где 0, 3 и т.д. - значения для аргументов, используемых в Sub.

Имя Sub и модуля не должны совпадать. Иначе при запуске макроса будет выскакивать ошибка конфликта имен "Ambiguous name detected".
Изменено: somebox - 12.06.2019 17:42:08
 
somebox, Просто ваш вопрос в #1 cтавил в тупик, ибо или ответ элементарный или вопрос слишком сложный.  а ответ #6 меня , не макрушника, совсем поставил в тупик. Вопрос был про функции , а ответ о подпрограммах.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Вопрос был про функции , а ответ о подпрограммах.
Я имел ввиду функции в понимании других ЯП. То, что в VBA оно называется подпрограммой, не знал. Так понимаю, функции здесь - нечто иное.
 
Цитата
БМВ написал:
cтавил в тупик
Привет, Михаил.
Первый пример - это процедура Sub, второй - функция Function. Возможно, вопрос был про перезагрузку методов, которой в VBA нет. Но был ли действительно про это вопрос - можно только догадываться. А ТСы любят загадки. Один вон хочет, чтобы эго попросили... Странные люди порой забредают.
 
Андрей VG, Андрей, привет. Только хотел написать
Function - Функция
SUBroutine - подпрограмм, процедура.
И в других ЯП суть не меняется.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
в других ЯП суть не меняется.
ну, как сказать. С-ишники считают, что всё есть функция. А если нам от неё ничего не надо, то пусть вернёт void (буквально пустоту)
 
Андрей VGАндрей,  Ну это или упрощение или обобщение или  ….   Наверно , как и в соседней теме, SUB рудимент. Я скорее предпочту Функцию, которая вернет статус исполнения или ничего, но все мы знаем о ограничениях вызова "макросов"
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
SUB рудимент
Я вот сейчас отпускнику кальяном по шляпе!..
 
Цитата
Юрий М написал:
Я вот сейчас отпускнику кальяном по шляпе!..
Да, ладно, Юрий. Админ не обязан это знать. Жив Sub в VB.Net. Да и Delphi Procedure никуда не терял :)  Это gosub уходит в небытие.
 
А чего он на любимый Sub наезжает?  
 
Юрий М, Андрей VG,  А что не так? Что не может функция того, что может подпрограмма? Я не говорю о том, что есть эта сущность или нет в ЯП. А вот подпрограмму использовать, как аргумент другой подпрограммы/функции нельзя. Значит функция более универсальна. Осталось только добавить возможность вызова с кнопок и прочего .
Изменено: БМВ - 12.06.2019 19:24:28
По вопросам из тем форума, личку не читаю.
 
А чего ты сразу Sub в рудименты - обидно ведь...
 
Цитата
БМВ написал:
вот подпрограмму использовать, как аргумент другой подпрограммы/функции нельзя
Кто это вам сказал? ;)  Уже в Pascal 5.5 было можно, VB.Net можно, достаточно объявить соответствующий делегат, а уже его указывать как параметр при объявлении функции/процедуры. :)
 
Юрий М, Просто кот хвостом пользуется, а медведь - нет :-)
По вопросам из тем форума, личку не читаю.
 
Просто у медведя не хвост, а жалкая пародия ))
 
Цитата
Юрий М написал:
а жалкая пародия ))
пародисты или последователи?

Цитата
Андрей VG написал:
уже его указывать как параметр при объявлении функции/процедуры
то есть окончательно стерли границу и тогда смысл в двух  "разных" сущностях?
По вопросам из тем форума, личку не читаю.
 
Миш, бывают у котов исключения, но что-то не видел медведей с приличным хвостом ))
 
Юрий М, https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BB%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BD%D­0%B4%D0%B0 :-)
По вопросам из тем форума, личку не читаю.
 
Ты ещё про пингвина дай ссылку ))
Страницы: 1
Наверх