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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ToggleButton1_Click, ToggleButton2_Click, ...
    организовать цикл по frmImages.Controls, используя тип, ...
     
    Сами процедуры придется добавлять в форму с помощью VBA,
    правда не знаю точно как.
     
    В модуль приходилось когда-то, а в форму нет (по аналогии должно быть то же).
    Да и не программист я.
     
    Программисты есть?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 19:09 02-04-2007 | Исправлено: Olive77, 19:28 02-04-2007
    AndVGri

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

    Цитата:
    ToggleButton1_Click, ToggleButton2_Click, ...  
    у меня этих кнопок 2562. Можно, в принципе, на создавать кода, используя VBE для них всех, но стоит ли овчинка выделки?
    Я собственно для себя самого пишу. Надёргал FaceID из стандартных изображений на кнопках Excel, чтобы использовать на своих. В форме выводяться кнопки с этими изображениями, а я из списка пользовательских панелей и соответствующего списка кнопок на них по нажатой кнопке-переключателю задаю нужное мне изображение. Только ведь можно пропустить где уже нажал, а где не отжал. Буду внимательнее.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:28 02-04-2007
    Olive77

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

    Цитата:
    у меня этих кнопок 2562

    А как ты их на форме все разместил?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 19:33 02-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Olive77
    Так Scroll для Frame сделал 12 штук в ряд, а остальные во фрейме прокручиваются. Если интересно, то могу файлик выложить

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:37 02-04-2007 | Исправлено: AndVGri, 19:38 02-04-2007
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понятно.
    непонятно - целесообразность сего занятия, но раз для себя то все можно. -

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 19:46 02-04-2007
    le3ch

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Посоветуйте как лучше запрограммировать сверку каждого значения из одного именованного диапазона с каждым значением из другого именованного диапазона. Именованные диапазоны могут располагаться на разных листах и иметь разное количество строк и столбцов.
    Заранее всем спасибо.

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 06:58 03-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Создай класс кнопок. Тогда достаточно будет одной обработки On_Click на все кнопки. Пример можно найти у Уокенбаха. multiple_buttons называется.
    Кстати, у того же Уокенбаха есть надстройка Face_Id - она не решает твою проблему? В окне показываются все фэйсы, а когда наводишь на какой-нибудь из них курсор, появляется его ID. Есть открытые исходники.
     
    Добавлено:
    le3ch
    Какими должны быть итоги сверки?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:01 03-04-2007 | Исправлено: The okk, 07:02 03-04-2007
    le3ch

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Выделить цветом одинаковые значения.

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 07:18 03-04-2007
    The okk



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

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:00 03-04-2007
    le3ch

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

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 08:08 03-04-2007
    The okk



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

    Цитата:
    Если это возможно без VBA, то как?

    Тут без VBA навряд ли, поскольку:
    Цитата:
    диапазоны соответсвенно могут иметь самые различные адреса

    Если бы диапазон, где нужно выделять значения, имел бы постоянный адрес, можно было бы просто использовать Условное Форматирование с формулой типа: =ЕСЛИ(ПОИСКПОЗ();ИСТИНА;ЛОЖЬ). Но в данном случае, насколько я понимаю, неизвестен заранее диапазон, где нужно применить условное форматирование. Или известен?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:17 03-04-2007
    le3ch

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Заранее диапазон неизвестен.
    Но если бы он был известен, то я не понимаю как бы отработал ваш вариант?

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 08:25 03-04-2007 | Исправлено: le3ch, 08:28 03-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    le3ch
    Вот тебе процедура. В проверяемом диапазоне будут выделены синим значения, которые есть в Проверочном диапазоне.

    Код:
    Sub ВЫДЕЛИТЬ_СОВПАДЕНИЯ(Проверяемый_диапазон As String, Проверочный_диапазон As String)
        Dim rngTestRange As Range, rngSearchRange As Range, Cell As Range
        Set rngTestRange = Names(Проверяемый_диапазон).RefersToRange
        Set rngSearchRange = Names(Проверочный_диапазон).RefersToRange
        For Each Cell In rngTestRange
            If Not rngSearchRange.Find(Cell) Is Nothing Then _
               Cell.Interior.ColorIndex = 5
        Next Cell
    End Sub

    Вызывается так:

    Код:
    Sub test()
        Call ВЫДЕЛИТЬ_СОВПАДЕНИЯ("Тест", "Тест1")
    End Sub


    Цитата:
    Но если бы он был известен, то я не понимаю как бы отработал ваш вариант?

    Как обычное условное форматирование. Если условие выполняется, формат ячейки меняется на установленный. В качестве условия задаешь формулу, выдающую ИСТИНА, если значение есть в проверочном диапазоне (есть функции ПРОСМОТР и ПОИСПОЗ, которые ищут по массиву), и ЛОЖЬ - если, соответственно, нету.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:00 03-04-2007 | Исправлено: The okk, 09:01 03-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Спасибо всё заработало. А по поводу FaceID, так у меня то ж показывает. Мне надо было дальше, чтобы выбранная кнопка-переключатель задавала соответствующее изображение для пользовательской кнопки пользовательской же панели, которые заданы в списках. Чтоб на бумажку FaceID не выписывать

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:44 03-04-2007
    le3ch

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Спасибо, макрос отличный.

    Цитата:
    есть функции ПРОСМОТР и ПОИСПОЗ, которые ищут по массиву

    Блин походу я туплю , но все же в качестве аргумента искомого элемента может выступать только - число, текст, логическое значение, либо ссылка на один из этих типов?

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 09:54 03-04-2007 | Исправлено: le3ch, 10:05 03-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    А, вон оно что! Делаешь надстройку для выбора значка для кнопки. Да, полезная вещь - ведь в экселе почему-то очень ограниченный набор значков. Будешь менять стандартное контекстное меню?
     
    Добавлено:
    le3ch

    Цитата:
    в качестве аргумента искомого элемента может выступать только - число, текст, логическое значение, либо ссылка на один из этих типов?

    Ну правильно. А тебе это и надо. В качестве аргумента будет выступать сама ячейка, точнее, ссылка на нее. Чтобы не пришлось писать это по сто раз, формула пишется в стиле R1C1 (ссылка ячейки на саму себя выглядит, как RC). Если же формула пишется в стиле А1, то содаешь условное форматирование для одной яейки, а потом заполнением или копированием делаешь то же форматирование для всего диапазона.  
    Но раз у тебя границы диапазона меняются, то тебе условное форматирование не поможет, поскольку оно устанавливается руками для определенных ячеек, а тут они заранее не определены.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:55 03-04-2007 | Исправлено: The okk, 10:05 03-04-2007
    AndVGri

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

    Цитата:
    Да, полезная вещь - ведь в экселе почему-то очень ограниченный набор значков. Будешь менять стандартное контекстное меню?

    Ну, не совсем так. Чтобы не разводить оффтоп, если интересно, да и вдруг кому пригодится, выложил здесь

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 11:37 03-04-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    le3ch ещё добавлю пять копеек...
    решение похожей задачи от ZORRO2005 в теме Excel FAQ
    только в формуле используйте ссылку на ваш диапазон: =СЧЁТЕСЛИ(диапаз1;...)
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 11:46 03-04-2007
    Farest

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вот такая задачка помогите решить её
    Private Sub ComboBox2_Change()
    Select Case Cells(2, 9).Value
    Case "Нажимной гарнитур"
    Rows(18).Hidden = True
    Case "Скоба (Прямоугольная)"
    Rows(18).Hidden = False
    Case Else
    Rows(18).Hidden = False
    End Select
    End Sub
    Можно ли вписать сюда или дописать код
    каторый меняет название ячеек.
    Тоесть в одной ячейке меняется название а в другой ячейке пишется заменившееся название.
    Если можно обращайтесь в аську.213550720

    Всего записей: 119 | Зарегистр. 07-05-2006 | Отправлено: 14:27 03-04-2007 | Исправлено: Farest, 14:28 03-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Farest
    А при чём тут ComboBox?  
    If Cells(i, k).Value <> Cells(j, l).Value Then
        Cells(j, l).Value = Cells(i, k).Value
    End If
    Где: i, k - номер строки/столбца ячейки где меняется название, а j, l - номера строки/столбца ячейки где нужно изменить название

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 14:37 03-04-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