Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vasiliy74

    Цитата:
    =ЕСЛИ((I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT))=0;0;((J72-I72)+(СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AF:$AF)+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AV:$AV))/$E$4-I73)/(I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT)/$E$4))

    что то не вижу проблемы... (за исключением того, что у меня нет книги Transactions_TransactionsB...
     
    попробуйте так (в одну строчку!!!):

    Код:
     
      Cells(1, 1).FormulaLocal = "=ЕСЛИ((I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT))=0;0;((J72-I72)+(СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AF:$AF)+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AV:$AV))/$E$4-I73)/(I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT)/$E$4))"
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:19 22-04-2008
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH

    Цитата:
    Возможно ли заставить ВБА залесть в интернет...

    Такой функциональности у VBA нет, но можно написать dll c такими функциями.

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 10:14 22-04-2008
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK

    Цитата:
    что то не вижу проблемы...

    Проблема может быть, а может и нет, здесь зависит ещё от версии Excel и от длины формулы. У разных версий Excel свои пределы по максимальной длине формулы, когда она превышается, то Excel работает нормально (как обычно), а в VBA начинаются "чудеса".
     
    Добавлено:
    Так что решения проблемы пока нет. У самого есть проблемный код, который не работает в определённых ситуациях из-за этого тупого переполнения внутреннего буфера Excel.
     
    Добавлено:
    Vitus_Bering

    Цитата:
    Цитата:Возможно ли заставить ВБА залесть в интернет...  
    Такой функциональности у VBA нет, но можно написать dll c такими функциями.

    Думаю, что многое можно сделать средствами WinAPI (думаю, что можно воспользоваться системной dll, а не свою писать). Я недавно писал программу для управления прибором в VBA, взаимодействие с железом шло через Dll. Работает. Excel задумывается, прибор щёлкает, работает.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 12:40 22-04-2008 | Исправлено: nick7inc, 12:49 22-04-2008
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc

    Цитата:
    можно воспользоваться системной dll

    Согласен, кому, что больше нравится.

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 13:19 22-04-2008
    ssa9999

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот именно, в наше время обычно всё можно сделать через OLE, всегда есть готовые библиотеки.
     
    Для работы с инетом через OLE есть, как минимум:
    1) Библиотека "Microsoft Internet Controls" (shdocvw.dll)
    2) к Visual Studio 6 прилагался элемент ActiveX "Internet Transfer" (Inet.ocx)
     
    Чё с ними делать - см. справку MSDN, или в большинстве учебников по Бейсику что-нибудь написано про это

    Всего записей: 130 | Зарегистр. 06-01-2005 | Отправлено: 14:24 22-04-2008
    TONADOOM



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH

    Цитата:
    Возможно ли заставить ВБА залесть в интернет, открыть веб-страничку, выделить на ней все, скопировать, вставить на лист1 (использовать формат конечных ячеек)  

    это сделать можно, называется - ВЭБ-ЗАПРОС. Чтоб изучить это - надо включить запись макросов и вставить на страницу ВЭБ-ЗАПРОС, потом в полученном коде макроса будет вырисовываться необходимое решение.
    Тема настолько нетривиальна и индивидуальна в каждом случае, что для обработки данных придется изучить парсинг HTML страниц, но после - радоваться результату.
    Лично у меня на изучение применения запросов при более-менее сносном знании основ ВБА ушло 2 месяца ...
    Всё самое вкусное в данном случае находится в QueryTables , ищите всё, что связано с этим словом в гугле ...
     
    Чтоб не так сильно мучаться - можно на необходимой Вам странице, открытой в браузере, выделить и скопировать необходимую информацию, потом -  вставить в EXCEL. Посмотрите что получится, потом можно изменить свойства этого запроса через стандартное меню EXCEL.
     
    Добавлено:
    У меня есть вопрос к гуру.
    кто-либо знаком с темой получения информации при помоши запросов к SOAP?
    дополнение для работы с SOAP выходило для офисса XP и 2003, а вот для 2007 не было.
    Конкретно моя проблемма - надо пример как написать на VBA код, который "заберет" в нужную мне переменную XML файл.  
    имеющаяся у меня информация - следующая:

    Цитата:
     HTTP POST
    The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.
     
    POST /Services/EmExService.asmx/FindDetail HTTP/1.1
    Host: www.autoemex.ru
    Content-Type: application/x-www-form-urlencoded
    Content-Length: length
     
    _Login=string&_Password=string&_MakeLogo=string&_DetailNum=string&_Substs=string
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
     
    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">string</string>
     

    буду благодарен за любой совет.

    Всего записей: 205 | Зарегистр. 02-09-2002 | Отправлено: 20:28 22-04-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vitus_Bering
    nick7inc
    Если бы только еще знать, что такое dll и WinAPI. Я знгаю, что эти штуки есть и не более (((
    Есть компилятор Бэйсик 3 (русский) и 5 (нерусский) Наверное у них возможностей больше в плане dll и WinAPI. Но максимум, что я на них смог сделать, это составление ЮзерФорм, (даже не знаю, как создать исполняемый файл exe)
     
    пс.
    Сегодня пришла в голову мысль:
    Пишем файл Excel с безобидной табличкой "Отчет моему боссу о проделанной работе" по умолчанию все столбцы с отчетом скрыты и защищены паролем. В книге макрос: - "при открытии книги снять пароль, отобразить столбцы"
    Отправляю "отчет" боссу. Он его получает и гневно ругается - где отчет? Я его не вижу!
    - Иван Иванович! Ничего страшного, поставьте низкий уровень безопасности и все увидите.
    Самое интересное в продолжении макроса...
    ... отправить исходящее по электронной почте боссу моего босса "Ты редиска"  
    И это самое безобидное из всех возможностей.
     
    Не пинайте за флейм  
     
    Добавлено:
    TONADOOM
    СУПЕР!!! Спасибо.
    Сейчас испытал, работает. Но вот с логинами/паролями как - не знаю.

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 22:08 22-04-2008
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH

    Цитата:
    Если бы только еще знать, что такое dll и WinAPI.

    Смотрите сначала в шапке: WinApi. Лекция из курса "Основы офисного программирования и язык VBA" Если коротко, то можно объяснить, что такое WinApi так. У VBA есть стандартный, но ограниченый набор процедур и функций. Иногда приходится сделать что-то, чего нет в этом наборе, либо есть, но програмиста не устраивает. Например, нам надо вывести диалог выбора имени папки или выбора цвета. В первом случае у VBA есть только диалог "Сохранить как" и "Открыть". Можно ими воспользоваться, а можно сделать средствами WINAPI  
    Далее....
     
     
    Добавлено:
    Есть идея добавить ссылку на этот пост в шапку. Как к этому отнесётся общественность?

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 11:29 23-04-2008 | Исправлено: nick7inc, 11:47 23-04-2008
    David Kats



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Кто-нибудь сталкивался с переносом данных из 1С в Эксель, или наоборот?
    В принципе у меня все получается. Только не могу закрыть книгу Эксель из 1С.  
    Пишу такой код:
    ApplicationExcel.Workbooks.Close("ПутьИИмяКниги.xls");
     
    При выполнении выдает сообщение, что в методе Close нехватает параметров...

    Всего записей: 29 | Зарегистр. 06-11-2007 | Отправлено: 12:34 23-04-2008
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    David Kats
    Есть такая штука, как справка. Там чётко написано что и как передавать:

    Цитата:
    Workbooks("BOOK1.XLS").Close SaveChanges:=False
     

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 13:24 23-04-2008
    David Kats



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    Спасибо, конечно, за внимание. Однако, замечу, что есть еще такая штука, как ПЛАТФОРМА 1С. И когда обращаешься к MS Excel ИЗ ЕЕ кода, то конструкция, предложенная Вами, к сожалению, не работает. В том-то и вопрос КАК правильно обращаться к методам Экселя ИЗ ДРУГИХ приложений НЕ MicroSoft?

    Всего записей: 29 | Зарегистр. 06-11-2007 | Отправлено: 13:35 23-04-2008
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    David Kats

    Цитата:
    ApplicationExcel.Workbooks.Close("ПутьИИмяКниги.xls")

    Тогда скажите, откуда у вас этот кусок кода? В VBA так не пишут, может вам нужна помощь по специфическому бейсику (от фирмы 1C)? Я серьёзно.  
     
    Добавлено:
    Посмотрите, вы имя книги не в том месте передаёте.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 13:55 23-04-2008
    ssa9999

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1) Что вообще такое "перенос данных из 1С в Excel"? ведь 1Сом можно сохранить таблицу в формате Excel. Не надо никакой химии
     
    а в обратном направлении я бы переносил через ADO+ODBC. Работает в сотни раз быстрее
     
    2) Действительно, имя книги надо передавать не методу Close, а коллекции Workbooks
     
    а методу Close параметр SaveChanges можно передавать (если вообще надо передавать этот параметр) в виде 0 или -1 (что означает соответственно False и True)

    Всего записей: 130 | Зарегистр. 06-01-2005 | Отправлено: 15:31 23-04-2008
    TONADOOM



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH
    видел галочку "сохранить пароль" в свойствах диапазона данных запроса ...
    надо исследовать свойства QueryTables - именно эта штука добавляет данные на страницу, а через меню реализованно не всё, на что эта штука способна.

    Всего записей: 205 | Зарегистр. 02-09-2002 | Отправлено: 19:15 23-04-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за ответы!
     
     
    ВОПРОС
    И еще вопрос, не столько из области программирования, сколько из области математики
    Имеем строку из 20 ячеек, в которые занесены числа от 1 до 20
    Надо получить все возможные варианты разнесения числел по ячейкам
    т е
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
     2  1  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
     3  1  2  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
     
    системы нет никакой условий три: Получить все возможные варианты, числа в строке не повторяются, одинаковых строк нет...

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 20:39 23-04-2008
    gvserg1

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Теперь вопрос следующего характера:  
    для макросов создал свою менюшку и назначил "горячие" клавиши которые работают в сочетании с Alt. Но в моем случае когда я нажимаю Alt+R менюшка только подсвечивается но не выпадает, не так как стандартные менюшки. Тоесть я не могу далее вызывать подменю просто нажав горячую клавишу подменю, тоесть вызвать подменю нажав комбинацию Alt+R -> R. Для этого мне нужно нажимать Alt+R -> Enter -> R.  
    Это можно как то исправить?  
    http://slil.ru/25704499  

     
    А можно ли макросом емулировать нажатие кнопок, тоесть, например, назначить макрос на сочетание Alt+R,  который бы запускался и открывал мое меню? Потом мне нужно только нажать R и сразу запустится подменю Rounding
     
    Спасибо
     
    Добавлено:

    Цитата:
    Имеем строку из 20 ячеек, в которые занесены числа от 1 до 20  


    Цитата:
    Получить все возможные варианты

    количество возможных вариантов: 20!=2432902008176640000

    Всего записей: 23 | Зарегистр. 30-01-2008 | Отправлено: 20:47 23-04-2008 | Исправлено: gvserg1, 21:00 23-04-2008
    korvin76



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время суток, уважаемые спецы.
    Помогите решить задачи (ну не программист я, а по учебе задают ).
     
    1.Для Word basic. Используя функции Inpput Box и Msg Box решить юбую математическую задачу.
     
    2.Отформатировать несколько абзацев текста.
     
    3.Написать  программу форматирования таблицы:
    (таблица 3 на 3, в каждой яцейки применить различное  форматирование текста, напримерв одной ячейке текст выровнен по лев. краю, в другой по ценру, в третьей текст подчеркнутый, и т.д.)
     
    4. Написать процедуру табулированияпростой функции с выводом в Excel  
    F = sin(x)
    x в пределах [-П;+П]
      x     F
    -3.14  -0.054
    -3.13  -0.055
     
    5. Любая Вычислительная задача с элементами форматирования
     
    6. Написать функцию, которая будет создавать дополнительные листы в Excel и на них организовывать вывод
     
    7. В Excel вывести данные и разместить их по определенным ячейкам (Input Box) и вывести в Word.
     
    Заранее спасибо за помощь

    Всего записей: 114 | Зарегистр. 19-12-2005 | Отправлено: 11:12 24-04-2008
    ssa9999

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1) Что значит "получить все возможные варианты"?
    Как получить, что ли? а разве есть варианты, как получить? Перебирать варианты, да и всё. В чем суть вопроса, не понял.
     
    Чтобы не повторять комбинации, при перестановках следует, очевидно, придерживаться какой-нибудь системы. Самая очевидная система: на первое место ставим сначала число 1, на второе - первое из оставшихся, то есть 2. И т.д.
     
    Потом на первое место ставим 2, на второе - первое из оставшихся, то есть 1. И т.д.
     
    Вот и вся система.
     
    Число комбинаций, как верно было замечено, равно 20!, то есть если вы намерены все эти комбинации где-то запечатлеть, то оставьте эту надежду - места нигде не хватит.
     
    2) Эмулировать нажатие кнопок - стандартная команда во многих языках, SendKeys. И всего делов

    Всего записей: 130 | Зарегистр. 06-01-2005 | Отправлено: 11:21 24-04-2008
    lightyear

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день
    С наступающими праздниками
     
    В связи с этими самыми праздниками передо мной возникла небольшая задачка, нужно отослать массу поздравлений (200 шт.)
    Естественно, их очень не хотелось верстать руками, учитывая, что они достаточно однотипны, возникла мысль сделать список, по которому все это и сгенерить и выкинуть в Ворд, 1 поздравление - 1 страница, напечатать и вперед
    + это же решение чудно подойдет не только на Пасху), но и к любому другому празднику, когда нужны массовые поздравления.
    Пользователь - секретарь, умеет что-от набить в Excel и запустить макрос .
     
    VBA вообще пользуюсь от случая к случаю, но на этот раз он выглядел самым подходящим решением вопроса
    Хочу сказать спасибо Вашему форуму, Вы дали мне направление поиска, а дальше все было легко
     
    Все сделано элементарно в одной к книге, к которой макрос и прикреплен, никаких передаваемых или настраиваемых параметров не делалось, ибо на скорую руку
    Устройство книги
    В книге два листа
    Список
     Столбец А - № п/п - для макроса вообще говоря не надо, но для списка пригодиться
     Столбец В - Фамилия
     Столбец С - Имя Отчество (для украинского языка сразу в кличному відмінку, напр. Олено Миколаївно)
     Столбец D - Пол (ж/м)  
     Столбец Е -  Признак включения в список поздравляемых (0/1)
     Остальные столбцы произвольны (наши  товарищи их приспособили под фирмы и адреса)
     
     Поздравление
    Ячейка А1 - текст поздравления (многостроное набирается через Alt+Enter)
    Ячейка B1 - обращение к мужчине (Дорогой/Любимый/Родной)
    Ячейка C1 - обращение к женщине (Дорогая/Любимая/Родная)
    Ячейка D1 - регалии (С уважением, большой начальник)
    Ячейка E1 - посылатель поздравления (ФИО большого начальника)
     
    И сам макрос, который по книге указанной структуры, выборочно для товарищей у кого в признаке поздравления стоит 1, генерит поздравления в ворд по ходу форматируя
     

    Код:
     
        Dim i As Integer
        Dim g As String
        Dim s As String
        Dim s1 As String
        Dim female As String
        Dim male As String
        Dim result As String
        Dim wrd As Variant
        Dim myRange As Variant
                     
        Worksheets("Поздравление").Activate
        g = Range("A1").Value
        male = Range("B1").Value
        female = Range("C1").Value
        s = Range("D1").Value
        s1 = Range("E1").Value
         
        Set wrd = GetObject(, "Word.Application")
        wrd.Visible = True
        wrd.Documents.Add
        Set myRange = wrd.Selection
        myRange.Font.Size = "16"
        myRange.Font.Name = "Times New Roman"
        myRange.Font.Italic = True
     
        Worksheets("Список").Activate
        For i = 1 To 1000 Step 1
            result = ""
             
            If Range("C" & i).Value = "" Then 'list ends
                Exit For
            End If
             
            If Range("E" & i).Value = 1 Then 'include this record
             
             
                If Range("D" & i).Value = "m" Then   'is man?
                    result = result & male
                Else
                    result = result & female
                End If
                         
                result = result & " " & Range("C" & i) & "!"
                 
                myRange.ParagraphFormat.Alignment = 1 'center
                myRange.Font.Bold = True
                myRange.TypeText result
                 
                myRange.TypeParagraph
                myRange.TypeParagraph
                 
                myRange.ParagraphFormat.Alignment = 1 'center
                myRange.Font.Bold = False
                myRange.TypeText g
                 
                myRange.TypeParagraph
                myRange.TypeParagraph
                myRange.ParagraphFormat.Alignment = 0 'left
                myRange.Font.Size = "14"
                myRange.Font.Bold = True
                myRange.TypeText s
                 
                myRange.TypeParagraph
                myRange.TypeParagraph
                myRange.ParagraphFormat.Alignment = 2 'right
                myRange.TypeText s1
                         
                'break new page
                myRange.InsertBreak Type:=7
            End If
        Next
         
        Set wrd = Nothing
    End Sub
     

     
    ! Периодически возникает проблема с созданием объекта Word, решается просто пользовательсикм запуском Word, в смысле если Word уже запущен макрос в Excel отрабатывает без проблем
     
    Может кому-то пригодиться в качестве "рыбы" или при решении сходных задач

    Всего записей: 1 | Зарегистр. 24-04-2008 | Отправлено: 19:32 24-04-2008 | Исправлено: lightyear, 19:43 24-04-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На счет подбора комбинаций из 20 чисел: Сегодня написал макросик, который в каждой последующей строке меняет данные двух ячеек местами RND()
    Вобщем затя безтолковая, ибо расчет по этим вариантам будет выполнятся годами.
     
    А суть вопроса такова. Это связано с работой (График движения поездов)
    Итак: Есть жесткий график движения поездов по станции, точное, заложенное в него время прибытия и отправления поездов как четных (туда) так и нечетных (обратно). Их 20 пар. На станции происходит смена локомотивных бригад. Т. е. прибывшая бригада с четным идет отдыхать, и после отдыха отправляется назад с нечетным. В полный расчет вникать не буду. Суть в том, что после отдыха бригаду надо запланировать под поезд обратно. Программа выдает "вилку" из двух значений времени "минимальное время возможного отправления" (раньше которого бригаду отправить категорически нельзя) и "максимально возможного времени" (после которого отправлять не рекомендуется т к начинает выплывать нерациональное использование) В итоге надо подвязать прибывшие бригады к отправляющимся поездам с минимальным отдыхом.
    пример
     
           вилка
    миним        максим    №бриг     №бриг       время
                                   туда       обратно       отпр
    10:26           13:41      1                           0:22
    12:34           15:49      2                           1:20
    16:04           19:22      3                           2:30
    16:45           20:00      4                           4:03
    17:24           20:44      5                           4:53
    20:46             0:01      6                           6:49
    21:40             0:55      7                           7:55
    21:54             1:09      8                         10:12
    22:40             1:56      9                         11:30
    23:37             2:58      10                       14:00
    1:59               5:24      11                       14:15
    3:09               6:26      12                       14:50
    3:28               6:43      13                       15:49
    5:10               8:42      14                       16:35
    5:06               8:24     15                        17:42
    5:41               8:56      16                       20:50
    11:57           16:53     17                        21:28
    8:12             11:27     18                       21:53
    8:24             11:39     19                       23:30
     
    В итоге надо расставить 1, 2, 3, 4 .... 19 в столбце №бригады обратно с минимальными "расходами"  Например, лучший вариант для первой прибывшей бригады отправиться в 11:30. Т е в столбце №бриг обратно на против 11:30 ставим однерку.

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 23:18 24-04-2008 | Исправлено: CEMEH, 23:22 24-04-2008
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru