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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях 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
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven, сохранить. Закрыть книгу. Открыть книгу.  
    Убедиться, что панель появляется при открытии _данной_ книги и исчезает при ее закрытии. Если заработает, то потом доделаем, чтобы она пряталась при переключении на другую книгу, если открыто несколько.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 02:13 02-04-2012
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    grbdv
    Не проходит, всё меняется одинаково в любой книге.
     
    Добавлено:
    При закрытии книги панель остаётся

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 15:25 02-04-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Цитата:
    Не проходит, всё меняется одинаково в любой книге.

    Задача минимум была: показать "UserTools" при открытии книги, и спрятать ее при закрытии. Это решается кодом выше. Надо чтобы "UserTools" уже существовала (хотя бы пустая).
     
    Надо:
    1. Создать панель "UserTools"
    2. Создать новую книгу.
    3. Поместить в нее код
    4. Сохранить.
     
    Что не получается? На каком этапе? Что "не проходит"? Что "все меняется"? Причем тут "любые книги"? Я не понял ничего... УМВР
     
     
    Добавлено:
    king_stiven
    http://rghost.net/private/37367776/dc21a48beae25d62b2e534e10818771b
    В данном варианте панель "UserTools" будет отображаться только в данной книге. Если панели с таким именем нет, то она будет создана автоматически.  

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 15:45 02-04-2012
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Делать вышеописанное не помогло. То есть панель появляется при открытии любой книги и не исчезает при закрытии  _данной_  книги.
    А твой файл работает нормально.
    http://rghost.net/private/37367776/dc21a48beae25d62b2e534e10818771b
    Спасибо.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:21 02-04-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Цитата:
    Делать вышеописанное не помогло. То есть панель появляется при открытии любой книги и не исчезает при закрытии  _данной_  книги.  
    УМВР :)

    Цитата:
    А твой файл работает нормально. Спасибо.  
    Вот и слава Богу. На здоровье. Имей ввиду только, что автоматически создается лишь пустая панель. Без инструментов. Т.е., если ты ее удалишь через настройки, то и кнопки тоже пропадут. Панель-то восстановится, но пустая.
     
    Если концепция понятна, то на основе этого шаблона можно и дальше изгаляться. К примеру, панель может появляется только если активны опеределенные диапазоны ячеек, менять свой инструментарий по их контексту, плавать по экрану вслед за выделением etc.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 19:39 02-04-2012
    Crazyblind

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В общем такое дело. Компания занимается доставкой грузов. С утра водителям выдают список адресов, на которые надо заезжать. Ну и некоторое время водитель сидит и думает как ему лучше проехаться по этим адресам, какой из маршрутов будет самым оптимальным. Водитель, естесственно, не всегда принимает правильное решение, да и тратит время на обдумывание. Хочется сформировать эту таблицу адресов в минимальном по километражу порядке. Пишу в ВБА, потому что таблица изначально в Экселе, да и мне самому ВБА ближе, но если у кого есть какие идеи - приму любые предложения. Сейчас я вижу это только как найти код ХОРОШЕЙ карты, где расстояние от адреса до адреса считается по дорогам, а не напрямую, ну и просто необходимо как-то связываться с ней и методом пузырька переставлять адреса, пока не будет найден меньший путь по километражу в сумме всех адресов, вопрос только есть ли такие карты с кодом, ну или вообще у кого какие идеи?
     
    Заранее всем благодарен.
     
    P.S.: город Пермь.

    Всего записей: 17 | Зарегистр. 20-05-2009 | Отправлено: 16:50 07-04-2012 | Исправлено: Crazyblind, 16:51 07-04-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если предположить, что есть карта с километражом реальным, а не напрямую, то:
     
    1. Сделать в лоб (пузырьком :) по первой, имеющейся в распоряжении, карте.
    2. Требовать с водилы отчет - почему ему не понравился формальный маршрут с его видением порядка объезда точек и указанием причин.
    3. Если п.2 формализуется - формализовать в код.
    4. Формализовать пробки.
     
    После реализации п.4 придет понимание того, что надо было остановиться на п.1 исключительно в качестве рекомендации водиле :)

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 17:36 07-04-2012
    Crazyblind

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На пробки наплевать, это не такая уж и проблема для нашего города, они бывают в основном в центре, а заказы по всему городу (тех, кто пытается объехать пробку и создает еще одну тоже хватает). Еще есть идея просто обработки картинки(карты) по цвету дорог, например, пока еще думаю над этим.
     
    То есть пока что я пытаюсь выполнить только 1ый пункт этого списка, если это уж будет настолько неэффективно, то фиг с ним.

    Всего записей: 17 | Зарегистр. 20-05-2009 | Отправлено: 17:51 07-04-2012 | Исправлено: Crazyblind, 17:53 07-04-2012
    psiho

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

    Цитата:
    у кого какие идеи?

    А с гуглом или яндексом сделать взаимодействие в VBA не пробовали?

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 20:22 07-04-2012
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Crazyblind
    Я вижу так, вставляете WebBrowser в лист Excel, размещаете карту Google:

    Код:
     
    Public Sub GeoMaps()
    Лист3.WebBrowser1.Navigate ("http://maps.google.com/?ie=UTF8&ll=58.0050,56.1456")
    End Sub
     

     
    В ней есть возможность сразу добавить несколько адресов, и она высчитает оптимальный маршрут и его можно распечатать. Где то так.
     
    Добавлено:
    Ссылку на слове оптимальный ставил не я.
     

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 11:44 08-04-2012 | Исправлено: andrewkard1980, 11:50 08-04-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    Цитата:
    Ссылку на слове оптимальный ставил не я.  

    Это старая фича руборда. Есть еще несколько таких слов. Microsoft, к примеру. А у кого-то из дедов они в подписи зажиты :) Забыл, у кого... сорри.
     
    Добавлено:
    Упс... Значит не Microsoft... Сервер?
     
    Добавлено:
    Хе-хе... В начале предложения скрипт его не видит :) Сорри за оффтоп.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 14:08 08-04-2012
    7615790



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую!
    Опишу задачу. Есть колонка цифр (телефонных номеров) на "Листе1". Есть "Лист2" на котором навалена информация в хаотическом порядке но в которой встречаются цифры (номера телефонов) из первой колонки. Задача в следующем. Берем данные из "Листа1" ячейка А1 и ищем это значение на Листе2.  
    Если находим, то выделяем цветом (зеленым) ячейку где содержится хотя бы частичное совпадение с данными из Листа1. и переходим к следующему значению из "Листа1" ячейка А2
    По сути дела эта процедура аналогична команде Ctrl+h. Т.е найденные данные менять или удалять не нужно. Нужно что бы просто они подсветились цветом.
    По своему я эту задачу решил, но данные нужно вводить вручную, а там их тысячи. Во кусок кода, который по сути дела повторяется, только уже с новым данными.
     
    Cells.Replace What:="№ телефона из листа1 ячейка А1", Replacement:="№ телефона из листа1 ячейка А1", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=True
     
    и так далее. Т.е макрос состоит из таких блоков, количество которых столько же, столько и телефонов из Листа 1
    "Подсвечивание " делаю вручную вызвав команду Ctrl+h в поле "заменить на" заполняют вкладку "Формат" нужным мне цветом заливки, или цветом текста.
    Я думаю понятно, что я не специалист в VBA, но для личного пользования особой скорости мне не нужно. Нужно только "автоматизировать" процесс. Что бы данные в строку
    Cells.Replace What:="№ телефона из листа1 ячейка А1", Replacement:="№ телефона из листа1 ячейка А1"  
    подставлялись автоматически из "листа1 ячейка А1" дальше "листа1 ячейка А2" и так до конца списка.
     
    Вижу два варианта. Это организовать цикл, и подставить в поле поиска данные из массива, но на это уже меня не хватает. Прошу совета.

    Всего записей: 22 | Зарегистр. 10-11-2007 | Отправлено: 12:50 11-04-2012
    KF121



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    7615790
    Это можно сделать без всяких макросов и автозамен, с использованием условного форматирования и формулы.
    и так: идем в условное форматирование и создаем правило на основе формулы, пишем туда  
    =VLOOKUP(&A1;Sheet2!A:E;1;FALSE)=&A1
    или  
    =ВПР(&A1;Лист2!A:E;1;ЛОЖЬ)=&A1
    настраиваем как ходит чтобы выглядела ячейка
     

     
    и применяем правило для всего первого столбца, нажимаем ок
     

     
    вуаля и все номера которые есть на листе 2 покрасились в зеленую заливку
     

    Всего записей: 170 | Зарегистр. 24-05-2006 | Отправлено: 13:48 11-04-2012
    7615790



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Идея интересная, но возникли загвоздки (установлен Excel2003). Пройду последовательно, поправьте где не так.
    1.Захожу в "Формат" выбираю пункт "Условное форматирование". Выпадает картинка  
     
       
     
    2.Выбираю в поле условие "Формула" и ввожу  =VLOOKUP(&A1;Sheet2!A:E;1;FALSE)=&A1  
    3.Задаю формат ячейки (см. рис)
     
       
     
    4.Честно говоря вкладку там где мы применяем правило для всего первого столбца не нашел.
    5.После запуска пишет что возникла ошибка и курсор застряет на =VLOOKUP(этом месте &A1;Sheet2!A:E;1;FALSE)=&A1

    Всего записей: 22 | Зарегистр. 10-11-2007 | Отправлено: 15:24 11-04-2012
    KF121



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    оффис русский значит формула номер 2 которую я привел.
     
    вместо столбца A укажите свой столбец где находятся номера телефонов, второй параметр ВПР функции - перейдите на второй лист и укажите столбец где указаны номера телефонов в куче.
     
    так же посмотрите справку по команде ВПР

    Всего записей: 170 | Зарегистр. 24-05-2006 | Отправлено: 15:31 11-04-2012
    psiho

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KF121 и 7615790 , есть один нюанс. В Офисе 2003 нельзя сделать фильтр по цвету, если не стоят сторонние надстройки. Поэтому, если нужно будет затем отобрать эти выделенные данные, то лучше не применять условное форматирование, а просто напротив каждой позиции в следующем столбце поставить формулу ВПР. Тогда он покажет совпавшие номера и их можно будет отфильтровать
     
     

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 16:19 11-04-2012 | Исправлено: psiho, 16:19 11-04-2012
    KF121



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psiho
    ну задание было не фильтровать а покрасить. ))))

    Всего записей: 170 | Зарегистр. 24-05-2006 | Отправлено: 17:57 11-04-2012
    7615790



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    эх, друзья, не спорьте.  
    Дело в том, что данные, которые расположены на листе2 не структурированы, т.е. идет текст в котором номер телефона, дальше мейл, в общем, всё в куче. Если запускаешь для поиска и замены Ctrl+H, то ему всё равно, в какой колонке и частичное совпадение то же берет хорошо. ВПР команды штука то же не плохая, но немного не то. Грубо говоря, нужно чтобы в поле поиска и замены подставлялись одна за одной значения из базы. В моем случае это значения в колонке 1 Листа 1

    Всего записей: 22 | Зарегистр. 10-11-2007 | Отправлено: 18:12 11-04-2012
    psiho

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

    Цитата:
    Если запускаешь для поиска и замены Ctrl+H, то ему всё равно, в какой колонке и частичное совпадение то же берет хорошо.

     
    Не всегда.Допустим есть искомый номер телефона "123456", а на Листе 2 следующие числа: 123,567,12345. Примените Ctrl+H и он ничего не найдет, хотя эти числа представляют собой частичные совпадения.И что значит по-вашему частичное совпадение? Тот же пример выше: число 1 или 12 это тоже частичное совпадение или нет? Какая глубина совпадения должна быть?
    P.S. короче, реализовать с помощью маленького кода не сложно,только необходима эта глубина совпадений.

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 21:12 11-04-2012 | Исправлено: psiho, 21:19 11-04-2012
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер. Помогите, пожалуйста, с кодом, не могу разобраться как программно выбрать значение из выпадающего списка на сайте, вот часть кода:

    Код:
     
    Sub Test()
    Dim oIE As Object
     
    Set oIE = CreateObject("InternetExplorer.Application")
    oIE.navigate "http://o.aviso.ua/default2.aspx"
    oIE.Visible = True
     
    Do While oIE.Busy
    Loop
    oIE.document.all("ctl00_cph_next1").Click
    'oIE.document.forms("ctl00_cph_rootrubric").elements("922b27ff-1773-4dae-8a82-b1415327021a").Submit
     
    Do While oIE.Busy
    Loop
     
    End Sub
     


    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 22:36 11-04-2012 | Исправлено: andrewkard1980, 22:37 11-04-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru