Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/76: Рейтинг темы: голосов - 76, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 18.04.2013
Сообщений: 27
1

Запуск макроса из макроса ИЛИ повторение одного и того же кода

03.05.2013, 21:33. Показов 15490. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Excel

Есть код в 10 строк (назовем его "блок"), который повторяется 5 раз в модуле (макросе). При любых изменения "блока" несколько трудоемко производить те же изменения для оставшегося кода (при том, что при отладке проделывать подобное приходится часто).

Подскажите, пожалуйста, куда вставить этот "блок" отдельно, а в макросе ссылаться на него т.е. чтобы в итоге надо было код изменить только 1 раз, а не 5. Возможно, это называется запуск макроса из макроса?

PS: я начинающий, так что извините за, возможно, некорректную формулировку задачи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 21:33
Ответы с готовыми решениями:

Повторение одного и того же кода
Как сделать повторения одного и того же кода? SetCursorPos(x,y);...

Запуск макроса из другого макроса
Как в Word запустить из одного макроса другой? RunMacro куда засунуть?

Запуск модуля (программы, кода VB) из макроса AutoExec
Здравствуйте! Подскажите пожалуйста, как из AutoExec вызвать выполнение модуля (программы, кода...

Повторение применения макроса
Здравствуйте, форумчане! Прошу помочь в решении следующей задачи. Есть макрос такого плана: Sub...

13
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.05.2013, 21:47 2
Почитайте про циклы в любом букваре: Учебники, справочники, самоучители
Visual Basic
1
2
3
for i=1 to 5
  'блок
next
Можно вынести блок в подпрограмму
Visual Basic
1
2
3
4
5
6
7
for i=1 to 5
  Block 'или Call Block
next
'...
Sub Block()
  'блок
End Sub
1
1 / 1 / 0
Регистрация: 18.04.2013
Сообщений: 27
03.05.2013, 22:48  [ТС] 3
Вы не так поняли. "Блоки" выполняются не циклически, а в разных местах программы. Ну..это как, например, присвоение ячейке значения через 1005000 ссылок R[i]C[j]. Не знаю как объяснить еще...
Слова "один и тот же" совсем не равны по смыслу понятию "цикл". Тут другое.
0
6947 / 2851 / 549
Регистрация: 19.10.2012
Сообщений: 8,730
03.05.2013, 22:50 4
Да какая разница...
0
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.05.2013, 23:00 5
Значит, почитайте букварь про подпрограммы и функции.
0
1 / 1 / 0
Регистрация: 18.04.2013
Сообщений: 27
04.05.2013, 00:35  [ТС] 6
Цитата Сообщение от Казанский Посмотреть сообщение
Значит, почитайте букварь про подпрограммы и функции.
Извините, Вы не могли бы дать ссылку? Не знаю даже как искать такую информацию..(
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,223
04.05.2013, 08:43 7
Выложил бы сюда свой код было бы понятней.
Или книгу прицепи
0
1 / 1 / 0
Регистрация: 18.04.2013
Сообщений: 27
04.05.2013, 16:42  [ТС] 8
Цитата Сообщение от Alex77755 Посмотреть сообщение
Выложил бы сюда свой код было бы понятней.
Или книгу прицепи
А вот простой пример: есть "блок", который отвечает за запись некоторых значений во внешний файл. Этот блок встроен в каждый из 10-ти макросов. Как бы его вынести в отдельный макрос, чтобы можно было изменять только его, а в этих 10-ти вышеописанных макросах вызывать этот "блок"?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,223
04.05.2013, 22:20 9
Уже ответили! Ответы хоть читаешь?
вынести блок в подпрограмму
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
04.05.2013, 22:43 10
Запишите этот блок один раз как отдельную процедуру (sub - end sub). Желательно, в том же модуле, где все эти макросы. Там, где
...встроен в каждый из 10-ти макросов...
эти блоки удаляете, вместо них (ну как-бы чтоб место не пустовало) пишете вызов отдельной процедуры, где записан "блок" (Call [Имя процедуры]). А чтобы все это работало, в самом верху, перед первым макросом - Option Explicit , и сразу под ним - переносите все свои переменные и константы (а из самих процедур их же удаляете). Подчеркиваю - это если в одном модуле. Плюс, нужно учесть передачу аргументов (byVal, byRef), если нужно. Если в разных модулях - там свои тонкости с переменными.
Все это так, туманно. В шапке этого форума - ссылки на учебники. Вам так нужно было обяснить? С праздником!
1
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,223
04.05.2013, 22:55 11
примитивный пример вызова процедуры(есть "блок") с передачей параметра
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Макрос1()
Месага 1
End Sub
Sub Макрос2()
Месага 2
End Sub
Sub Макрос3()
Месага 3
End Sub
Sub Макрос4()
Месага 4
End Sub
 
 
Sub Месага(S)
        MsgBox S, 64, ""
End Sub
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
05.05.2013, 00:35 12
Дмитрий, Вы меня удивляете. За что спасибо? Я просто "расширено" написал, как... Alex77755 - немного более кратко, но более конкретно. "Казанский" и Hugo - совсем лаконично. Но все - об одном.
А вот у Jonh Walkenbach "Проф-ное програм-е на VBA" про это начинается где-то только на странице 223 , а у Matthew Harris "Освой самост-но програм-е для Microsoft Excel 2000 за 21 день" (я так понимаю, это жанр фэнтэзи) - на странице 393 . Ну не зануды? Нет чтоб с 5-ой страницы. И в двух словах. Прочитайте спокойно, а то наломаете....
1
ikki
05.05.2013, 00:54
  #13

Не по теме:

Цитата Сообщение от Igor_Tr Посмотреть сообщение
А вот у
у них оплата построчная

1
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,223
05.05.2013, 05:23 14
Option Explicit , и сразу под ним - переносите все свои переменные
А вот такого большинство считают, что делать не желательно, а лишь в случае крайней необходимости.
Лучше передавать параметры в качестве аргументов
0
05.05.2013, 05:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2013, 05:23
Помогаю со студенческими работами здесь

Повторение макроса на следующих строках
Добрый день, форумчане. Возможно подобная тема есть, но, к сожалению, я её не нашел. И так: есть...

Повторение запуска макроса каждую минуту
Dobyi denj! Kak mozno sdelatj, 4toby makros zapuskalsja kazduju minutu?? 4erez "Ontime" ne...

Долгая обработка, повторение макроса по кругу
Здравствуйте. Очень долго тружусь уже над своей программой для работы. Вроде всё отлично...

Синтаксис: точка в теле макроса struc и звёздочка в описании параметров макроса
struc XXXX { .: ; это что имеется ввиду??? ;..... .hwnd dd ? .lpVerb dd...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru