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

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

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

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    gince

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zdrastvuite
    OptionButton  atkryvaet Shett'y .Sdelal sam. Akazyvaetsia eto prosto. No drygoi vapros:
    Nna toi ze UserForm1 est ListBox1, kotoryi imeet dannye s diapazona A2:D40. B Propertie ja specialno neykazal c kokovo Sheet'a brat dannye, potomu cto nado pri vkliucenii OptionButton1 (atkryvaetia Sheet1) v ListBox'e videt dannye s Sheet1 A2:D40, pri vkliucenii OptionButton3 (atkryvaetia Sheet2) v ListBox'e videt dannye s Sheet2 A2:D40.
    A u menia Sheet'y perekliucajutsia, a dannye ne meniajutsia.  
     
    P.S. est neskolko eBook po etomy dely:
    (E-Book)_Excel_2002_Power_Programming_With_Vba_By_John_Wiley_&_Sons.pdf,(ENG)
    McGraw.Hill.Osborne.Excel.VBA.Macro.Programming.eBook-LiB.chm(ENG)
    Profisionallnoe programirovanie VBA  Excel 2002.pdf (RU)
    Mozet komy nado. Kuda ich kinut? JKa sam po Angliski neponimaju, probuju vcio i takim obrazom probuju naiti to cto nado

    Всего записей: 2 | Зарегистр. 19-02-2007 | Отправлено: 09:31 21-02-2007
    Anton T

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

    Цитата:
    2) Какой коммандой Сделать поиск по базе с учётом даты/номера  и категории.

    посмотри предыдущие несколько страниц, я делал фильтр.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 10:15 21-02-2007
    Troitsky



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

    Цитата:
    ...ячейка с датой напротив фамилии окрашивается в красный цвет (условным форматированием).  
    ...  
    Игрался вот с этим но ничего не получается

    разумеется, при использовании условного форматирования, формат ячейки в случае его срабатывания не изменяется, т.е. заливка ячейки (свойство .Interior.ColorIndex) какой была такой и осталась.

    Цитата:
    Вопрос: Как на VBA выполнить поиск людей у которых вышли проверки скопировать фамилии данных людей и вставить в другой столбец.

    Одно из решений, как говорится, в лоб: не мудрить и все те проверки, которые делаются при условном форматировании, выполнить в VBA.
     
     
    Добавлено:
    kandi

    Цитата:
    Макрос действительно вызывается. Но таких кнопок очень много, а макрос очень длинный и одинаковый для всех кнопок, за исключением кучи ссылок. Предполагаю, что есть возможность подставлять в каждый макрос не абсолюные адреса ячеек, а вычислять их, используя уникальный идентификатор кнопки. Но для этого его надо получить. Как?

    В VBA, в отличие от VB, отсутствует возможность создавать массивы элементов управления и использовать для обработки их событий одну процедуру Поэтому не совсем понятно, что подразумевается под "уникальным идентификатором кнопки"?


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 13:49 21-02-2007
    Dima11111

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

    Всего записей: 1 | Зарегистр. 21-02-2007 | Отправлено: 15:22 21-02-2007
    jONES1979



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

    Цитата:
    kandi  
     
    Цитата:Макрос действительно вызывается. Но таких кнопок очень много, а макрос очень длинный и одинаковый для всех кнопок, за исключением кучи ссылок. Предполагаю, что есть возможность подставлять в каждый макрос не абсолюные адреса ячеек, а вычислять их, используя уникальный идентификатор кнопки. Но для этого его надо получить. Как?  

     
    а нельзя оставить одну кнопку и вызывать из её обработчика тот же макрос, но с разными параметрами, в зависимости от текущей активной "критичной" ячейки ?

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 16:57 21-02-2007
    Maxximus75

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
     
    Dim r As Range  
     
    Application.FindFormat.Interior.ColorIndex = 3  
     
          Set r = Cells.Find(What:="", after:=ActiveCell, SearchFormat:=True)  
          If Not r Is Nothing Then r.Copy  
     
    Range("J2").Insert  
    Range("J2").ClearFormats  
    Application.FindFormat.Clear  
     
    End Sub
     
    Чего то не очень понял как это свойство .Interior.ColorIndex не изменяется, там ищется формат ячейки с помощью вот этого Application.FindFormat.
    тоесть если .Interior.ColorIndex = 3 то он останавливается на этой ячейки и копирует ее, потом надо все это зациклить и пустить по всему листу в поисках нужных ячеек красного цвета. Попробуй сам этот макрос, он найдет первую ячейку с форматом красного цвета скопирует ее и вставит в J2, но дальше он так и будет вставлять эту красную ячейку в J3, J4, итд. тоесть дальше поиска не происходит. Я просто не понимаю как работает эта функция  Application.FindFormat.

    Всего записей: 24 | Зарегистр. 04-12-2005 | Отправлено: 17:22 21-02-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maxximus75
    Объясняю еще раз. Ты применил к ячейке условное форматирование и в случае его срабатывания изменился цвет ячейки, но заливка ячейки какой была такой и осталась, т.е. свойство .Interior.ColorIndex не изменилось. Попробуй сделать вручную то, что ты пытаешься программно реализовать, и увидишь, что все не так просто


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:43 21-02-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kandi
    Определить положение кнопки можно, например, так:

    Код:
    Set tlc = CommandButton1.TopLeftCell
    Set brc = CommandButton1.BottomRightCell
    Set areaaround = CommandButton1.TopLeftCell.CurrentRegion

    Последнюю строку можно использовать, если область, к которой относится кнопка ограничена пустыми ячейками.
     
    Вот что я не нашел, так это как обратиться к кнопке (или другому ActiveX контролю) на листе через процедуру, то есть не зная имя контроля. Me как ни странно возвращает ссылку на сам лист, а не на контроль. Может через класс можно?  
    Без этого надо в код каждой кнопки вставлять CommandButton1, CommandButton2 и т.д.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 01:04 22-02-2007
    AndVGri

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

    Цитата:
    Вот что я не нашел, так это как обратиться к кнопке (или другому ActiveX контролю) на листе через процедуру, то есть не зная имя контроля. Me как ни странно возвращает ссылку на сам лист, а не на контроль. Может через класс можно?  
    Без этого надо в код каждой кнопки вставлять CommandButton1, CommandButton2 и т.д.  

     
    Не совсем понял Ваш вопрос. Можно приблизительно так.
     
    1. Если кнопка вставлена на лист из группы "Формы"
    Тогда циклом по
    Set wks = Worksheets(k)
    wks.Buttons(i).Name  
    находим нужную кнопку по имени
     
    2. Если кнопка была вставлена из редактора VBA, то есть как OLE объект
     
    тогда цикл будет
     
    Set wks = worksheets(k)
    ....
    If wks.OLEObjects(i) Is CommandButton Then
       If wks.OLEObjects(i).Name = "CommandButton1"
       ....
    End If
     
    Необходимые проверки пропустил, извините за лень

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 08:56 22-02-2007
    The okk



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

    Цитата:
    Не совсем понял Ваш вопрос.

    Имелось в виду обращение к объекту не как к элементу (массива, класса, коллекции), а как к контексту (как Me для формы или ЭтаКнига для книги).
     
    kandi
    А макрос с параметром вызывается так:
    'Макрос "параметры" '
    Т.е. вся запись в одинарных кавычках ('), а сами параметры - в двойных ("").
    Каждой кнопке назначаешь один и тот же макрос только каждый раз подставляешь нужные параметры.
    Но если кнопок порядка сотни, лучше сделать цикл в VBA и в нем, как советовал Yuk пройтись по всем участкам ,если, конечно, имеет место отделение одной таблицы от другой пробелами.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:37 22-02-2007 | Исправлено: The okk, 10:06 22-02-2007
    w25

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно написать макрос, чтоб скопировать все названия листов в столбик на 1 листе?

    Всего записей: 175 | Зарегистр. 22-07-2005 | Отправлено: 13:31 22-02-2007
    The okk



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

    Код:
    Sub CopySheetNames()
        Dim ws As Worksheet
     
        With Application
            .ScreenUpdating = False
            For Each ws In Worksheets
                Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws.Name
            Next ws
            .ScreenUpdating = True
        End With
    End Sub

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:40 22-02-2007 | Исправлено: The okk, 13:43 22-02-2007
    w25

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

    Всего записей: 175 | Зарегистр. 22-07-2005 | Отправлено: 13:59 22-02-2007
    aar



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

    Код:
     
    For I = 1 To 56
        ActiveWorkbook.Colors(I) = RGB(0, I * 4, 0)
    Next I
     

     
    а плавного перехода оттенков не получается:
     
       
     
     
    Собственно, вопрос в том, как добиться того, чтобы был ряд цветов такого плана:
     
       


    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 14:44 22-02-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aar
    Почему же не получается?
    Попробуй:
    Код:
    Sub TestColors()
    For Each c In Range("A1:A56")
        c.Value = c.Row
        c.Interior.ColorIndex = c.Value
        c.Font.ColorIndex = 56 - c.Value
    Next c
    End Sub

    А бардак в этой подменюшке на совести Билли.
     
     
    Добавлено:
    На самом деле бардак, никакого вразумительного порядка. Цвета с 17 по 32 вообще отсутствуют.

    Этот порядок оптимизирован для стандартного набора цветов. Цель которого, скорее всего, как можно сильнее разбросать похожие цвета. Для серий кривых, например.
     
     
    Добавлено:
    The okk

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

    Вот-вот, я именно об этом.
    Например, такой код:

    Код:
    Private Sub CommandButton1_Click()
       Call BClick(CommandButton1)
    End Sub
     
    Sub BClick(but As CommandButton)
       MsgBox but.Caption
    End Sub

    Вопрос - как теперь подставить в код кнопки вместо CommandButton1 переменную, возвращающую нажатую кнопку.
     
    Вообще, считаю оптимальным обойтись одной кнопкой, а область для обработки определять по активной ячейке. Как предлагал jONES1979.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:53 22-02-2007 | Исправлено: Yuk, 19:40 22-02-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Верно, все работает. Большое спасибо!  
    Смутило, что в менюшке цвета куда попало, на цвете ячеек не стал пробовать.

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 22:46 22-02-2007
    olik22

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброй ночи всем, у меня возникла такая проблема, помогите...
    Есть 2 листа, на одном 8 таблиц(они одинаковы, но там разные формулы и значения). На другом листе находится 8 combobox, в которых названия етих 8 таблиц. Возможно ли сделать так 4то при выборе в comboboxe грузились разные таблицы
    Срочно нужна помощь  
     
     
    Вроде нашел выход, но возникла другая проблема, ексел нормально не копирует формулы, у меня все формулы по сбивались
     
    Select Case ComboBox1.ListIndex
     
    Case 0
    Worksheets("Paskirstymas").Range("B4:N40").Copy _
        Worksheets("Paskirstymas").Range("B4:N40")
        Case 1
    Worksheets("Paskirstymas").Range("B45:N81").Copy _
      Worksheets("Paskirstymas").Range("B4:N40")
    Case 2
    Worksheets("Paskirstymas").Range("B86:N122").Copy _
      Worksheets("Paskirstymas").Range("B4:N40")
    Case 3
    Worksheets("Paskirstymas").Range("B127:N163").Copy _
     Worksheets("Paskirstymas").Range("B4:N40")
     
    может кто подскажет как сделать 4то бы ексел нормально копировал формулы?

    Всего записей: 3 | Зарегистр. 24-02-2007 | Отправлено: 00:45 24-02-2007 | Исправлено: olik22, 19:43 25-02-2007
    kandi



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jONES1979, Yuk, AndVGri, The okk
    Большое спасибо за советы. Попробую переварить и реализовать. Потом поделюсь.

    Всего записей: 38 | Зарегистр. 27-12-2003 | Отправлено: 12:53 25-02-2007
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает?  
    Как можно проверить, есть ли соединение с интернетом (в общем случае)?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 13:54 26-02-2007 | Исправлено: Olive77, 15:30 26-02-2007
    saurian



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    кто подскажет как выслать готовый документ на конкретно заданный ящик  
    Допустим activedocument нужно отправить на 123@mail.net
    пробовал sendmail, но вроде он не позволяет в параметрах указать конкретный ящик или я чего-то не углядел.

    Всего записей: 12 | Зарегистр. 01-02-2007 | Отправлено: 15:55 26-02-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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru