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

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

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

    Всего записей: 4 | Зарегистр. 27-09-2007 | Отправлено: 06:35 09-10-2007
    Olive77

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

    Цитата:
    Экспорт активной диаграммы в различные графические файлы:  
    Код модуля книги [?]  
    Код стандартного модуля [?]  

    Здорово
     
    maratino
    Выражения наподобие * и ? могут быть использованы только с текстом, а >, <, >=,<= и <> только с числами.
     
    Так что, по-видимому, придется в дополнительном столбце производить преобразование чисел в текст (text(A1,0)).

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 11:43 09-10-2007 | Исправлено: Olive77, 11:46 09-10-2007
    lex79



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Результат понравился, спасибо огромное!!!

    Всего записей: 91 | Зарегистр. 31-10-2005 | Отправлено: 17:23 09-10-2007
    ol7ca

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

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 18:00 09-10-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca и ALL
    Цитата:
    я как-то видел сайт с примерами скрипта для решения общих задач - очень полезная штука!

    очень рекомендую ознакомится с Хитростями Excel - http://www.planetaexcel.ru/tips.php
    даже в шапку сейчас добавлю...

    Цитата:
    много вопросов затрагивается в этом топике, но найти нужную информацию нелегко - топик очень большой и требует систематизации
    тут не поспоришь... мне очень помогает то, что я сохраняю версию для печати на диск и ищу там - а ищу по принципу "помнится что-то такое было..." Но, с другой стороны, здесь есть настоящие Мастера - Гуру владения VBA - они всегда подскажут и помогут! так что - дорогу одолеет идущий...
     
    По поводу литературы: по VBA видел в эл.виде следущие книги:
    "Программирование на VBA Учебное пособие. [Е.Н. Горных]"
    "Программирование на VBA 2002 [Кузьменко В.Г.]"
    "Профессиональное программирование на VBA в Excel 2002 [Уокенбах Джон]"
    "Л.А.Демидова, А.Н.Пылькин - Программирование в среде VBA"
    "VBA для тех, кто любит думать [Антон Орлов]"
    "VBA для `чайников` [Стив Камминг]"
    "Программирование в Microsoft Office. Для пользователя"
    и на англицком
    "John Wiley & Sons - John Walkenbach - Excel 2002 Power Programming with VBA.pdf"  
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 21:10 09-10-2007
    ol7ca

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

    Цитата:
    http://www.planetaexcel.ru/tips.php  

     
    я тоже его периодически просматриваю - оч полезный!
     

    Цитата:
    По поводу литературы: по VBA видел в эл.виде следущие книги:  
    "Программирование на VBA Учебное пособие. [Е.Н. Горных]"  
    "Программирование на VBA 2002 [Кузьменко В.Г.]"  
    "Профессиональное программирование на VBA в Excel 2002 [Уокенбах Джон]"  
    "Л.А.Демидова, А.Н.Пылькин - Программирование в среде VBA"  
    "VBA для тех, кто любит думать [Антон Орлов]"  
    "VBA для `чайников` [Стив Камминг]"  
    "Программирование в Microsoft Office. Для пользователя"  
    и на англицком  
    "John Wiley & Sons - John Walkenbach - Excel 2002 Power Programming with VBA.pdf"  

     
    а есть ли ссылки на эти книги?

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 01:11 10-10-2007
    Ddashevskiy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день господа. Я только начал знакомство с вба, не ради праздного любопытства, а из-за интересов работы.
    Читаю материал на сайте "первые шаги", там я увидел что можно обращаться к ячейкам используя адресацию r1c1
     
    cell (1,2).select  и т.д и т.п
     
    Однако я нигде не могу достать информацию о том каким образом выделить область, используюя такую адресацию. Подскажите пожайлуйста синтаксис.
     
    Допусти мне надо выделить строку от cell (1,1) до cell (1,6).
     
    Заранее примного благодарен.
     

    Всего записей: 12 | Зарегистр. 10-10-2007 | Отправлено: 09:56 10-10-2007
    Gavrik



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ddashevskiy
     
    Range(Cells(1,1),Cells(1,6)).Select

    ----------
    Жизнь на 1/10 состоит из происходящего и на 9/10 из того как мы реагируем на происходящее.
    Реагировать надо весело, иначе жизнь покажется как лестница в курятнике - короткая и в дерьме.

    Всего записей: 797 | Зарегистр. 16-10-2001 | Отправлено: 10:04 10-10-2007
    CMD



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такая задача: на листе несколько графиков, нужно применить к ним некоторое действие. Причем применять это действие в порядке увеличения свойства Top объектов ChartObject, т.е. начиная с верхней диаграммы на листе и заканчивая нижней. Намекните алгоритм как это сделать.

    Всего записей: 311 | Зарегистр. 18-05-2004 | Отправлено: 10:20 10-10-2007
    Ddashevskiy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sub Удаление_пустых_строк()
     
    Dim r As Integer
    Dim c As Integer
    Dim h As Variant
    Dim flag As Boolean
     
    For r = 1 To 10
            For c = 1 To 6
                h = Cells(r, c).Value
                If Not IsEmpty(h) Then flag = True
            Next
        If Not flag Then
            Rows(r).Select
            Selection.Delete Shift:=xlUp
        End If
        h = Empty
        flag = False
    Next
    End Sub
     
    Подскажите пожайлуйста как это можно было сделать не так "влоб" а с использованием выделения строки?

    Всего записей: 12 | Зарегистр. 10-10-2007 | Отправлено: 11:05 10-10-2007
    Gavrik



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ddashevskiy
     
    Заменить  
     
        Rows(r).Select  
            Selection.Delete Shift:=xlUp
     
    на  
     
        Rows(r).Delete Shift:=xlUp
     
    Добавлено:
    а.. я тормоз ты имееш ввиду как убрать один из циклов ?

    ----------
    Жизнь на 1/10 состоит из происходящего и на 9/10 из того как мы реагируем на происходящее.
    Реагировать надо весело, иначе жизнь покажется как лестница в курятнике - короткая и в дерьме.

    Всего записей: 797 | Зарегистр. 16-10-2001 | Отправлено: 11:09 10-10-2007 | Исправлено: Gavrik, 11:12 10-10-2007
    Ddashevskiy

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

    Всего записей: 12 | Зарегистр. 10-10-2007 | Отправлено: 08:41 11-10-2007 | Исправлено: Ddashevskiy, 08:48 11-10-2007
    Fandorine

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Имеется бланк в виде xls-файла, в который каждый месяц заносятся данные, и сохраняются под соответствующим именем, например май.xls.  
    Требуется: в конце года просуммировать все данные по соответствующим ячейкам, то есть сделать файл год.xls, в котором каждая ячейка была бы суммой соответствующих месяцев (кроме текстовых ячеек, естественно  )  
    Кто может подсказать, как это проще всего сделать? В смысле с максимальной автоматизацией.  
       
    Итоги надо подводить не только за год, но и за квартал, полугодие и т.п.  
    То есть задача стоит - просуммировать данные по всем файлам которые есть в папке. Это реально сделать только средствами VBA? Если да, то какие функции использовать?..  

    Всего записей: 5 | Зарегистр. 10-10-2007 | Отправлено: 09:47 11-10-2007
    Ddashevskiy

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

    Всего записей: 12 | Зарегистр. 10-10-2007 | Отправлено: 10:07 11-10-2007 | Исправлено: Ddashevskiy, 10:27 11-10-2007
    Oyger

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fandorine
     
    Написать макрос, значит? А взять книжечку, почитать, а уже что не ясно спросить у народа?
    Я понимаю, помочь если что-то не получается или команду подсказать, ошибку найти или еще что подобное.
    А тут: "разбираться мне в лом, да и работать не охота".
    Тем более Твоя задача решается и "ручками".
    Так как у Тебя есть
    Цитата:
    бланк в виде xls-файла
    берешь и сохраняешь его как, к примеру, "год.xls".
    Дальше в первой ячейки пишешь формулу - сумма соответствующие ячейки во всех файлах за год. Снимаешь "закрепление ячеек" в формуле и данную формулу растаскиваешь по бланку (в те ячейки куда Вам надобно).
    Аналогично делаешь файл с сумой за любой другой период.
    И работайте на здоровье.
    Если Вы и этого не умеете (а судя по вопросу

    Цитата:
    Это реально сделать только средствами VBA?

     - не умеете), то купите для начала "Excel для Чайников". А потом уже поговорим о

    Цитата:
    максимальной автоматизацией

     
    Добавлено:
    Ddashevskiy
     
    Для начала: как ты обозвал свою процедуру? Я имею в виду не имя, а описание: публичная или еще что? Если у Тебя есть две процедуры, которые находятся в разных модулях и описаны "Private", то они друг друга "не увидят.
    Во-вторых: как Ты создавал кнопку на листе Excel'я? Через "элементы управления"? То есть способ получше (по крайней мере мне нравится намного больше): в Excel'е есть панель "формы". Открываешь ее. Дальше, создаешь уже с помошью ее кнопку на листе. А кнопки назначаешь твой макрос. Но опять же, твой макрос не должен иметь описание "Private".

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 10:23 11-10-2007
    Ddashevskiy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Функцию я описал без приставки - по умолчанию. Кнопка на форме, форма вызывется не по событию а по запуску макроса. Кнопку на запуск макроса создал на панели инструментов через настройку (там веселая рожицца) . Большинство косяков у меня из-за среднего знания написания английских слов. Я слово функция написал с тремя ошибками - поетому она у меня и не определяется. Но вот сделать функцию публичной у меня получается - пишу public - а он мне фры...

    Всего записей: 12 | Зарегистр. 10-10-2007 | Отправлено: 10:53 11-10-2007
    Oyger

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

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 11:15 11-10-2007 | Исправлено: Oyger, 12:25 11-10-2007
    Fandorine

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oyger
    Забыл написать, вариант типа =D38+'[май.xls].'!$D38+'[июнь.xls].'!$D38... не предлагать.
    Почему- долго объяснять.
     

    Цитата:
    Я понимаю, помочь если что-то не получается или команду подсказать
     
    я именно и прошу подсказать базовые команды, функции, которые нужны для реализации этой задачи. Просто их названия . А уж почитаю я сам.  
     
    Дело в том, что работать с этой программой, если ее так можно назвать, буду не я. Желательно чтоб человек в папке выбрал нужные файлы (то есть, 3 месяца, полугодие либо год), а программа просуммировала их значения.  
     

    Всего записей: 5 | Зарегистр. 10-10-2007 | Отправлено: 11:17 11-10-2007
    Oyger

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

    Цитата:
    я именно и прошу подсказать базовые команды, функции, которые нужны для реализации этой задачи.

    Dim, Workbooks, Open, For... Next, Cells, Value, Close. Помогло?
    На этой странице уже обсуждали ссылки на книги по VBA для начинающих. Начните оттуда.

    Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 11:26 11-10-2007
    Fandorine

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

    Всего записей: 5 | Зарегистр. 10-10-2007 | Отправлено: 11:34 11-10-2007
       

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