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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    FaRa0n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, Все!
     
    Я больше дизайнер, - VBA знаю на уровне абы как (В универе преподавали - и то я гуманитарий).
     
    Очень прошу Вас помочь с элементарными вещами. К сожалению, я и их забыл напроч, а может и не знал. Программка нужна в ресторан, где компьютером, к сожалению более-менее владею только я.
     
    Итак, что я насобирал видно на скриншоте (на саму xls указал ниже ссылку):
    http://s08.radikal.ru/i181/0908/65/7836f224df92.jpg
     
    n - количество заказов за день.
    Кнопки "Add", "Delete" - добавляют/удаляют заказ.
     
    Столбик № равен n.
    Order - номер текущей странички в чековой книжке (не принципиально, хотя и с ней проблемы есть, когда строк вообще нет). Вводится ручками только первая строчка - остальные ++
    Type - у меня 1 или 2 - в жизни - Credit Card или Cash (по умолчанию вводится 1 - т.к. кредитками расплачиваются чаще). Если надо - ручками меняю на 2.
    Total - вводится ручками - сколько клиент потратил
    Tip - чаевые - вводится, только если клиент расплатился Кредиткой (Type = 1) - вводится ручками.
     
    CASH BACK - может быть отрицательная.
     
    На данный момент программа считает определенные суммы (на скриншоте видно). Обычное сложение/вычитание. Оператор ветвления основан на столбце "Type". Т.е. если 1 - то считаем сумму в одну переменную, если 2 - то в другую.
     
    Что хочется сделать:
     
    1.Чтобы при нажатии на "Add" в столбце "Type" появлялись элементы ComboBox (выпадающий список) с двумя вариантами "C.C." (по умолчанию) и "CASH".
     
    2. Понимаю, что программа написана абы как, совсем не по правилам хорошего тона программирования. Наверное, все те строки, которые выполняются, при нажатии кнопки "Count" - надо заключить в функцию. И вызывать эту функцию каждый раз при нажатии на "Add" или "Delete" (и самой "COUNT" естественно)- чтобы программа каждый раз сама, без напоминания пересчитывала.
     
    3. Не могу разобраться, если число заказов равно 0. Ошибки, т.к. строка по сути пуста, а столбец Order черпает себя с предыдущей строки. Вот и ошибка.
     
    4. Не могу понять, почему переменная n (она объявляется, при нажатии на кнопку "Add") не хочет работать в другой процедуре (при нажатии на "COUNT"). Приходится заводить новую что не очень хорошо.
     
    5. Если у кого MS Office 2003 - плз, проверьте - работет ли программа в нём. Вроде бы сохранял в режиме совместимости. Но чёрт его знает.
     
    В примере - даны те данные, которые уже проверены. Т.е. там 4 заказа - всё посчитано как надо. Вроде математически программка считает. Хотя, уверен, глюков там море.
     
    Огромная просьба - гляньте, пожалуйтса! Если можете - подправьте пункты.  
    Если нет желания, то помогите хотя бы с решением 1-го. Никак не могу даже на уровне теории сообразить, как же должны появляться эти КомбоБоксы. Какие у них должны быть имена, и должен ли это быть массив. Вобщем я запутался конкретно.
     
    Очень надеюсь на Вас!
     
    Ссылка на файл
    http://narod.ru/disk/12085502000/Stoli.zip.html
     
    Спасибо.

    Всего записей: 134 | Зарегистр. 07-08-2004 | Отправлено: 15:36 18-08-2009
    MilanAC

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Дана задача в методичке, не понимаю, что нужно вообще сделать. Пожалуйста, помогите разобраться с тем, что от меня требуется.  
     
    Самостоятельно в программной среде Excel постройте моделирующий алгоритм численного и графического решения экономико-математической задачи по определению области возможных цен и объемов продукции, обеспечивающих доход свыше 650 тыс. рублей при диапазонах допустимых цен от 100 до 200 руб. и объемов продукции от 1000 до 5000 изделий.  

    Всего записей: 3 | Зарегистр. 18-08-2009 | Отправлено: 19:56 18-08-2009
    SAS888

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

    Цитата:
     Можно ли как-нибудь заставить его также работать при включении фильтра в любом столбце

    Посмотрите Этот пример.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:26 19-08-2009
    Natavanka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    Супер! Работает, как надо!!!
    СПАСИБО ОГРОМНОЕ!!!

    Всего записей: 4 | Зарегистр. 10-08-2009 | Отправлено: 17:59 19-08-2009
    FaRa0n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А мне может кто-нибудь помочь? Хотя бы пункт 1.
     
    Надо появление СомбоБокса при нажатии на кнопку =(

    Всего записей: 134 | Зарегистр. 07-08-2004 | Отправлено: 10:21 20-08-2009
    Alexikit

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FaRa0n
    Я конечно не специалист, но на уровне теории, почему бы при нажатии на кнопку Add не организовать вызов формы, куда вставить ComboBox уже проблем нет, а из формы уже добавлять строку.

    Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 13:42 21-08-2009
    febreze2009



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, не знаю как реализовать.
    Задача: Есть два столбца значений. Один около 6000 ячеек, второй 200. Все значения в одном и втором столбце шестизначные положительные, целые числа. Необходимо сравнить/проверить есть ли эти 200 значений в большом списке, по сути найти их. При положительном результате как-нибудь их выделить (не важно, цветом, символом в столбце рядом или другим способом).

    Всего записей: 24 | Зарегистр. 26-07-2009 | Отправлено: 11:47 22-08-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    febreze2009
    выделить в большом списке найденные из второго(который 200) ?
    и обязательно ли использование макросов?
    Дело в том, что обычное условное форматирование (формула =СЧЁТЕСЛИ(диапазон, ячейка) легко решает Вашу задачу.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 13:29 22-08-2009
    febreze2009



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Может и не обязательно, только у меня не получается это реализовать. Используя Вашу подсказку у меня получается только достигнуть проверки 1 или 0 (есть совпадения или их нет). А мне нужно выделить значения в большом списке, если такие же есть в маленьком.
     
    например:
    1       4
    2       6
    3       3
    4       ..
    5       200
    6
    ..
    6000
     
    Результатом работы формулы или макроса будет выделение в левом столбце значений 4,6,3

    Всего записей: 24 | Зарегистр. 26-07-2009 | Отправлено: 14:30 22-08-2009 | Исправлено: febreze2009, 14:31 22-08-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    febreze2009
    ну, я не знаю, как ещё объяснить...  
    вот, картинка:
    вот — пример

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:40 22-08-2009
    febreze2009



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
     
    Иногда хочется орать, когда полностью переписываешь с источника, а у тебя нихрена не работает:

     
    Пошагово:
    1. Ввел значения/открыл файл с ними
    2. Выделил ячейку A2
    3. Выбрал из меню Автоформатирование
    4. Ввел формулу, нажал ОК.
    5. Выделилась цветом только ячейка А2.
     
    Выделять найденные ячейки нужно в большом списке, а не в малом
    Почему в формуле +А2, что это дает?
     
    ЗЫ. Пример забрать не могу с этого сайта, кинь на мыло плиз "098собакаua.fm"

    Всего записей: 24 | Зарегистр. 26-07-2009 | Отправлено: 07:22 23-08-2009 | Исправлено: febreze2009, 07:33 23-08-2009
    SERGE_BLIZNUK

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

    Цитата:
    3. Выбрал из меню Автоформатирование  

    хм.. странно. на рисунке вроде бы Вы выбрали (как и надо!) УСЛОВНОЕ ФОРМАТИРОВАНИЕ
     
    ладно. не суть важно.  
    Ввели формулу. Кстати по формуле +A2 - плюсик сам Excel добавил, гад.. думаю, что можно и без него. А более правильно формула должна выглядеть так:

    Код:
    =СЧЁТЕСЛИ($C:$C;A2)>0

    впрочем, проблема у Вас не в этом!
     
    а в этом:

    Цитата:
    4. Ввел формулу, нажал ОК.  
    5. Выделилась цветом только ячейка А2.  

    дальше надо стать на ячейку с формулой, нажать на желтую кисточку (Это "Формат по образцу") и ВЫДЕЛИТЬ ВЕСЬ БОЛЬШОЙ СПИСОК.
     
    Проверить можно так. если Вы всё сделали правильно, то на ЛЮБОЙ ячейке в большом списке меню - Условное форматирование - должна быть формула  
    =СЧЁТЕСЛИ($C:$C;ТУТ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ из большого списка)>0  
     
     
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 11:43 23-08-2009
    evgeniy89

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Необходимо повесить макрос, в таблицу excel находящуюся на обменнике, который будет отправлять уведомление, после того как в таблицу будут внесены изменения и она будет закрыта, пользователю в локальной сети об его изменении посредством отсылки письма, либо через виндовский мессенджер. Как можно выполнить данную процедуру?

    Всего записей: 1 | Зарегистр. 24-08-2009 | Отправлено: 14:27 24-08-2009
    metrim

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Дело такое
    Нужно решить задачу такого типа как описано здесь http://www.firststeps.ru/vba/excel/r.php?52 , но расширив функциональные возможности.
    Будет набор диапазонов: "индекс" (с уникальным значением); описание; плотность и т.д.
    Нужно что бы функция брала значение (строковое вероятно) в ячейке (допустим В1), искала в поле индекс соответствие и возвращала значение из соответствующей ячейки диапазона описание допустим (или любого другого), т.е. функция вида podrobnee(A1,описание)
    Вроде ничего сложного быть не должно, только вот не получается рабочего кода (путаюсь с параметрами значений диапазонов)
    Подскажите плз. Решение должно быть простым ....
    Заранее спасибо

    Всего записей: 110 | Зарегистр. 05-12-2002 | Отправлено: 00:39 25-08-2009
    visual73



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evgeniy89
    не проще ли следить за самим файлом excel и когда он изменяется получать сообщение. есть сторонний софт. зачем нужен vba?

    Всего записей: 962 | Зарегистр. 26-12-2005 | Отправлено: 09:06 25-08-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    metrim тестовый пример есть? (с разжёванными указаниями, что есть и что должно быть)?
    почему пишете в тему Excel VBA - решением должен быть макрос?!
     

    Цитата:
    Решение должно быть простым ....  
    :)  
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:13 25-08-2009
    FaRa0n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexikit
    Да вот в том то и дело, что нужно КомбоБокс вызывать не в форму, а на шит.
     
    Как это можно сделать? Объясните, плз. Никто не знает что ли?

    Всего записей: 134 | Зарегистр. 07-08-2004 | Отправлено: 10:15 25-08-2009
    matel

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня есть екселевский файл http://narod.ru/disk/12388811000/car_test.xls.html
    мне надо сделать макрос, который ставит/снимает птичку на любос чекбоксе и выбирает значение на любом листбоксе. Основная проблема, что я не могу найти имена этих элементов управления. Сделайте кто-нибудь -- буду очень благодарен!

    Всего записей: 71 | Зарегистр. 27-12-2006 | Отправлено: 11:06 25-08-2009
    Alexikit

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

    Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 12:37 25-08-2009
    metrim

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

    Цитата:
    metrim тестовый пример есть? (с разжёванными указаниями, что есть и что должно быть)?
    почему пишете в тему Excel VBA - решением должен быть макрос?!  

    Ну собственно решение своей задачи я ужо нашел http://programmersforum.ru/showthread.php?t=59677
    Мне нужно было что то типа этого, только хотел я решать это средствами макроса
     
    Но вообще ворос заинтересовал и остался:
    Допкстим есть именованный диапазон "индекс"(В1:В10) и "описание"(D21:D30) . Хотелось бы получить пользовательскую функцию, которую я мог бы записать в ячейку например Е51 как формулу  
    "=ПАРАМЕРТЫ_ВАРИАНТА(а,индекс, описание)"
    где а - ссылка или значение для поиска в индексе.
    Разумеется помимо диапазона "описание" эта формула должна будет обрабатывать так же и диапазоны "вес", "плотность" и т.д.
     
    Разумеется можно искать в "индекс"е совпадающее значение, определять положение ячейки в диапазоне, потом идти в диапазон "описание" и отсчитывать там ячейки сверху, но ведь все должно быть гораздо проще ...

    Всего записей: 110 | Зарегистр. 05-12-2002 | Отправлено: 16:50 25-08-2009
       

    Страницы: 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