|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть код VBA который рассылает пользователям ссылки на различные отчеты. У разных пользователей могут быть схожие отчеты. Помогите сократить код. Он имее следующий вид: Код: vbnet 1. 2. 3. 4. 5.
Соответственно у каждого письма есть вступление "<BR><BR>Здравствуйте.<BR><BR>Процесс авторассылки находится в тестовом режиме. При возникновении проблем с правами доступа или некорректностью ссылок прошу сообщить мне.<BR><BR>Обновлены следующие отчёты:<BR><BR>" , Списко отчетов, точнее ссылки на них, и заключение: "<BR><BR><BR><BR>С уважением <BR>аналитик отдела товародвижения<BR><BR>" Можно как то обозвать начало, отчеты и заключение что бы сократить код? Как правильно синтаксически не знаю написать. Должно быть на подобии: А = "Начало письма" Б = "отчет1" В = "отчет2" Г = "заключение" a = sendEmail("пользователь1@домен.ru", "Отчёты за " & Date & "", "<div style='font: 12pt Verdana'><i> А Б , В Г </i></div>") ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 09:37 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Im_Max , то есть дату в середину литерала для тебя воткнуть не проблема, а строковую переменную - проблема... не тупи, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 10:24 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Akina Im_Max , то есть дату в середину литерала для тебя воткнуть не проблема, а строковую переменную - проблема... не тупи, а? Код выше писал не я. Я просто добавлял по аналогии новые отчеты или пользователей. Сейчас у меня ошибка - перепонение модуля. Мне его нужно сократить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 10:56 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Im_MaxAkina Im_Max , то есть дату в середину литерала для тебя воткнуть не проблема, а строковую переменную - проблема... не тупи, а? Код выше писал не я. Я просто добавлял по аналогии новые отчеты или пользователей. Сейчас у меня ошибка - перепонение модуля. Мне его нужно сократить. так, создай новый модуль и перенеси часть процедур в него ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 11:03 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112Im_Maxпропущено... Код выше писал не я. Я просто добавлял по аналогии новые отчеты или пользователей. Сейчас у меня ошибка - перепонение модуля. Мне его нужно сократить. так, создай новый модуль и перенеси часть процедур в него Модуль разбит по дням недели. Можно и разбить. Тогда получится часть программа (например с ПН по СР) будет в одном модуле а часть в другом. С этим будет неудобно работать. Но если другого выхода нет, то так и зделаю. То что я написал в 1-ом посте не возможно реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 11:27 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Im_Maxqwerty112пропущено... так, создай новый модуль и перенеси часть процедур в него Модуль разбит по дням недели. Можно и разбить. Тогда получится часть программа (например с ПН по СР) будет в одном модуле а часть в другом. С этим будет неудобно работать. Но если другого выхода нет, то так и зделаю. То что я написал в 1-ом посте не возможно реализовать? неее, это выше моего понимания .... ТС, давай сначала ! что ты называешь модулем ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 11:53 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112Im_Maxпропущено... Модуль разбит по дням недели. Можно и разбить. Тогда получится часть программа (например с ПН по СР) будет в одном модуле а часть в другом. С этим будет неудобно работать. Но если другого выхода нет, то так и зделаю. То что я написал в 1-ом посте не возможно реализовать? неее, это выше моего понимания .... ТС, давай сначала ! что ты называешь модулем ? Захожу в Access. Объекты: Таблицы, Запросы, Формы, Отчеты, Страницы, Макросы, Модули В них хранится код VBA. Эти программы я запускаю через макросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 11:57 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Im_Max, авторТогда получится часть программа (например с ПН по СР) что такое эта "программа" ? это какая-то одна процедура, которая уже перестала "влазить" в модуль ? покажи часть этой своей программы она что, в зависимости от дня недели делает совершенно разные вещи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 12:17 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112Im_Max, авторТогда получится часть программа (например с ПН по СР) что такое эта "программа" ? это какая-то одна процедура, которая уже перестала "влазить" в модуль ? покажи часть этой своей программы она что, в зависимости от дня недели делает совершенно разные вещи ? Соверщенно верно. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Далее что бы его запусти. Создаю макрос. В макросе команда: "Запустить программу". Выбираю "rassilka()". Теперь призапуске макроса идет рассылка отчетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 12:36 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Im_Max Код: vbnet 1. 2. 3. 4. 5.
и сколько таких строк a = sendEmail ( ... в одном дне ? только честно ! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 12:48 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112Im_Max Код: vbnet 1. 2. 3. 4. 5.
и сколько таких строк a = sendEmail ( ... в одном дне ? только честно ! :) Ну если это поможет решить мою проблему :) Пн - 49 Вт - 55 Ср - 67 Чт - 66 Пт - 52 И еще есть ряд правил: в первый день месяца, в 5 день месяца, по ПН четных недель, по ПН нечетных недель и т.д. таких строк еще 55. До вчерашнего дня я все увеличивал и увеличивал этот модуль. Сегодня он остановился. Нужно его сократить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 12:57 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
последний раз я с таким сталкивался лет 20 назад - программа на GWB в 30к строк, 90% которых тупо PRINT... но там хотя бы челу платили за количество операторов в программе... Im_Max Затолкай ты эти свои строки ... в таблицу! добавь поле дня недели, буде надо - и вот тебе код в двадцать строк (один цикл по рекордсету) и счастья полные штаны! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 12:57 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
еще немного статистики: 21573 слова 194721 знака с пробелами 215857 знак с пробелами ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:00 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Akina, Да я б с удовольствием. Если бы знал как это делается. Человек до меня написал код. Я его просто копирую и дополняю. Как по другому я не знаю. Поэтому и обратился за помощью на форум. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:01 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
Во-первых, сделай таблицу. У тебя три параметра у твоей функции - значит, три поля (скажем, Address,Subject,Body) под эти тексты. У тебя один изменяемый параметр Date - значит, выбери один плейсхолдер (собсно сам литерал Date вполне ничего). У тебя есть полсотни правил, которые в принципе накрываются где-то 5 полями. В таблицу занеси свои строки и параметры отбора для них (скажем, для "понедельничных" в поле DayOfWeek ставим единицу, для вторничных соответственно двойку, для второй пятницы ставим не только 5 в поле DayOfWeek, но и 2 в поле WeekOfMonth, и так далее, для нечётной недели делаем ДВЕ записи, совпадающие во всех полях, кроме поля WeekOfMonth - в одной записи там 1, в другой 3...). Далее - одним оператором считаешь все свои условия отбора (день недели, номер недели и т.п.) на сегодня и тут же строишь строку запроса, которая выдаст тебе только те записи, которые следует обработать сегодня. В нём же заменяешь плейсхолдер на сегодняшнюю дату. Выполняешь запрос, получаешь набор записей за сегодня, уже подготовленный. Осталось в цикле перебирать по одной записи и соотв. значения передавать в сендмайл... И ВСЁ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:14 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
вообщем, ТС, этот й.стыд нужно переделывать "на корню" у тебя же Акцесс, тебе даже не нужно "искать" куда сохранить эти данные, что бы потом прочитать их из процедуры рассылки - всё ж "под рукой" 1 делаешь таб.ТиповРассылки (или ТиповСообщений, или что оно там такое) idMessage Message1 ...Обновлены следующие отчёты:<BR><BR><a href='\\fs\Отчеты\Готовые\Жатецкий_Гусь\[%Date%]_Жатецкий_Гусь.xlsx'>[%Date%] Жатецкий Гусь</a><...2 ...Обновлены следующие отчёты:<BR><BR> <a href='\\fs\Отчеты\Готовые\Остатки_РМ\[%Date%]_остатки_РМ.xlsx'>[%Date%]_остатки_РМ</...3 .... 2 делаешь таблицу получателей писем рассылки idMail Mail idMessage Mon Thu Wed ... Sun1 пользователь1@домен.ru 1 VV...2 пользователь2@домен.ru 1 V...V3 пользователь3@домен.ru 2 ...V это не очень правильная табличка, но тебе подойдёт 3 в итоге вся твоя процедура рассылки будет примерно такой Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
4 всё ! зы пока писал, Akina уже это же предложил, но что жж я зря "лабал" )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:20 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
AkinaВо-первых, сделай таблицу. У тебя три параметра у твоей функции - значит, три поля (скажем, Address,Subject,Body) под эти тексты. У тебя один изменяемый параметр Date - значит, выбери один плейсхолдер (собсно сам литерал Date вполне ничего). У тебя есть полсотни правил, которые в принципе накрываются где-то 5 полями. В таблицу занеси свои строки и параметры отбора для них (скажем, для "понедельничных" в поле DayOfWeek ставим единицу, для вторничных соответственно двойку, для второй пятницы ставим не только 5 в поле DayOfWeek, но и 2 в поле WeekOfMonth, и так далее, для нечётной недели делаем ДВЕ записи, совпадающие во всех полях, кроме поля WeekOfMonth - в одной записи там 1, в другой 3...). Далее - одним оператором считаешь все свои условия отбора (день недели, номер недели и т.п.) на сегодня и тут же строишь строку запроса, которая выдаст тебе только те записи, которые следует обработать сегодня. В нём же заменяешь плейсхолдер на сегодняшнюю дату. Выполняешь запрос, получаешь набор записей за сегодня, уже подготовленный. Осталось в цикле перебирать по одной записи и соотв. значения передавать в сендмайл... И ВСЁ. Большое спасибо за совет. Запрос который будет выбирать только те письма, которые нужно отправлять сегодня я смогу составить, вместе с остальными данными. А вот как составить этот цикл - понятия не имею. Можно на примере одной строки? НАпример есть таблица Пользователь Название письма Тело письма Датапользователь1@домен.ru Отчёты "<div style='font: 12pt Verdana'><i><BR><BR>Здравствуйте...15.11.2013 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:23 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112вообщем, ТС, этот й.стыд нужно переделывать "на корню" у тебя же Акцесс, тебе даже не нужно "искать" куда сохранить эти данные, что бы потом прочитать их из процедуры рассылки - всё ж "под рукой" 1 делаешь таб.ТиповРассылки (или ТиповСообщений, или что оно там такое) idMessage Message1 ...Обновлены следующие отчёты:<BR><BR><a href='\\fs\Отчеты\Готовые\Жатецкий_Гусь\[%Date%]_Жатецкий_Гусь.xlsx'>[%Date%] Жатецкий Гусь</a><...2 ...Обновлены следующие отчёты:<BR><BR> <a href='\\fs\Отчеты\Готовые\Остатки_РМ\[%Date%]_остатки_РМ.xlsx'>[%Date%]_остатки_РМ</...3 .... 2 делаешь таблицу получателей писем рассылки idMail Mail idMessage Mon Thu Wed ... Sun1 пользователь1@домен.ru 1 VV...2 пользователь2@домен.ru 1 V...V3 пользователь3@домен.ru 2 ...V это не очень правильная табличка, но тебе подойдёт 3 в итоге вся твоя процедура рассылки будет примерно такой Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
4 всё ! зы пока писал, Akina уже это же предложил, но что жж я зря "лабал" )) Не зря. Пока я доп вопрос писал, на него как раз и ответили. Akina и qwerty112 ОГРОМНОЕ Вам спасибо. У меня сейчас уже конец рабочего дня. В Пн буду пробывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:26 |
|
Сокращение кода VBA
|
|||
---|---|---|---|
#18+
qwerty112пока писал, Akina уже это же предложил, но что жж я зря "лабал" ))Почему зря? у тебя конкретный код, такая добротная основа для работы ТС. А у меня немного больше проработана система эмуляции крона. Всё вместе должно дать хороший результат, если ТС не протупит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2013, 13:38 |
|
|
start [/forum/topic.php?fid=60&msg=38466377&tid=2156696]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 412ms |
0 / 0 |