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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Выделяем какой-нибудь диапазон. Вопрос:
    Как обозначить в коде выделенный диапазон: начало и конец?
    Sub Диапазон()
    Range(начало диапазона, конец диапазона)
    End Sub
    Диапазон может выделятся каждый раз разный.
     
    Добавлено:
    Написала такой код, в котором набирая дату можно определить квартал. Код такой:
    Sub Вычисление_квартал()
    Dim Дата As Date
     
    Дата = InputBox("Введите дату: ")
    MsgBox "Соответствует " & _
    Квартал(Дата)
    If Дата >= "01.01.2006" And Дата < "01.04.2006" Then
    ActiveCell = "1 квартал"
    ActiveCell.Offset(0, 1) = Дата
    End If
        If Дата >= "01.04.2006" And Дата < "01.07.2006" Then
            ActiveCell = "2 квартал"
            ActiveCell.Offset(0, 1) = Дата
    End If
            If Дата >= "01.07.2006" And Дата < "01.10.2006" Then
                ActiveCell = "3 квартал"
                ActiveCell.Offset(0, 1) = Дата
    End If
                If Дата >= "01.10.2006" And Дата < "01.01.2007" Then
                    ActiveCell = "4 квартал"
                    ActiveCell.Offset(0, 1) = Дата
     
    End If
     
    End Sub
    Но этот код работает только при указании конкретно года. Можно ли как-то сделать так, чтобы даты и месяц не изменялись, а год изменялся, т.е. сейчас 2007 год, поэтому, чтобы работал этот код, нужно в нем изменить 2006 на 2007, а 2007 на 2008.
    Хотелось бы, чтобы год менялся автоматически.

    Всего записей: 40 | Зарегистр. 20-10-2006 | Отправлено: 20:42 26-01-2007
    Yuk



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

    Цитата:
    обозначить в коде выделенный диапазон

    Selection возвращает выделенный диапазон. Например
    Код:
    MsgBox Selection.Address

    Начало: Selection.Cells(1, 1)
    Kонец: Selection.Cells(Selection.Rows.Count, Selection.Columns.Count)
     
    Кстати, вот это не работает: Selection.SpecialCells(xlCellTypeLastCell), хотя по идее должно.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:17 26-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pantera3587
    Цитата:
    Написала такой код, в котором набирая дату можно определить квартал. Код такой:  
    Sub Вычисление_квартал()  
    ну позвольте мне опять вам ответить и предложить такой код:
    Код:
     
    Sub Вычисление_квартал()
    Dim Дата As Date
    Дата = InputBox("Введите дату: ")
    'MsgBox "Соответствует " & Квартал (Дата)
    Kvartal = Int((Month(Дата) - 1) / 3) + 1
    ActiveCell = Kvartal & " квартал"
    ActiveCell.Offset(0, 1) = Дата
    End Sub
     

    Пара маленьких замечаний:
    1) я закомментарил MsgBox - я не понял, что за функция Квартал?
    2) для определени квартала функция абсолютно не нужна - это одна простая формула
    3) при вводе Дата в модуле у вас абсолютно нет проверки на валидность введенного значения...
    надеюсь, помог.
     
     
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 22:13 26-01-2007
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Огромное спасибо за новый скрипт, который вы предложили! Для экономии места на форуме я удалил из своего макроса некоторую часть кода, теперь, когда этот код переведен не vbs я затрудняюсь добавить вырезанную часть в ваш скрипт, помогите, пожалуйста, его подправить. Здесь полный вид макроса.
    Т.к. Excel запускается планировщиком каждые два часа, то для этих случаев запускается свой макрос. Возможно, ли переписать эти манипуляции в один vbs скрипт? Важным моментом является то, что на рабочем листе имеются ссылки, которые обновляются при открытии книги, будут ли они обновляются, работая через vbs?

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 10:33 27-01-2007 | Исправлено: alin, 10:38 27-01-2007
    TONADOOM



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

    Код:
    Range("I4").Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True

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

    ----------
    всё, что ни случается - случается к лучшему
    чему быть - того не миновать
    а хорошо жить ешё лучше

    Всего записей: 205 | Зарегистр. 02-09-2002 | Отправлено: 18:07 27-01-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alin
    Как получаются данные диапазоны для каждого макроса:

    Цитата:
        Range("H3:H18", "H22:H25")  
        Range("H27:H31")  
        Range("H3")
    ...
     
        Range("J3:J18", "J22:J25")  
        Range("J27:J31")  
        Range("J3")
    ?
    Каждые два часа происходит сдвиг на два столбца? Т.е. для макроса MyMacro2 это столбец H, MyMacro4 - J, MyMacro6 - L, MyMacro8 - N, и т.д?
    Это я к тому, чтобы не громоздить кучу однотипного кода.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 21:39 28-01-2007 | Исправлено: Troitsky, 21:42 28-01-2007
    alin



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

    Цитата:
    Каждые два часа происходит сдвиг на два столбца?

    Совершенно верно.

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 00:46 29-01-2007
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alin
    Кажется, так:
    Код:
    strDate = Day(Now()) & "." & Month(Now())  
    intHour = Hour(Now()) + 1
     
    Set objExcel = CreateObject("Excel.Application")
     
    objExcel.Workbooks.Open "test.xls"
    With objExcel.ActiveWorkbook
        If .Sheets(1).Name <> strDate Then ' создаем лист если его не существует  
            .ActiveSheet.Copy .Sheets(1)
            .Sheets(1).Name = strDate
            ' перенос данных с 24:00 на 0:00
            .Sheets(1).Range("E3:E25").Value = .Sheets(1).Range("AD3:AD25").Value
            .Sheets(1).Range("E27:E31").Value = .Sheets(1).Range("AD27:AD31").Value
            ' очистка области
            .Sheets(1).Range("F3:AD25", "F27:AD31").ClearContents
        End If
        
        With objExcel.ActiveWorkbook.Sheets(1)
            ' в зависимости от часа заполняем нужные области
            .Range(.Cells(3, 6 + intHour), .Cells(18, 6 + intHour)).Value _
                = .Range("AE3:AE18").Value
            .Range(.Cells(22, 6 + intHour), .Cells(25, 6 + intHour)).Value _
                = .Range("AE22:AE25").Value
            .Range(.Cells(27, 6 + intHour), .Cells(31, 6 + intHour)).Value _
                = .Range("AE27:AE31").Value
        End With
        
        .Close True
    End With
     
    Set objExcel = Nothing

    Вроде, ничего не забыл


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 11:26 29-01-2007
    mironmtx

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток всем! Есть вопрос! Я с программированием не дружу! но поставили такую задачу! есть экселевский документ! Типа записной книжки! но генеральному для поиска впадлу нажимать Ctrl+F и вот надо чтоб в начале этого документа отображалась строка поиска по этому документу! подскажите плиз как это можно сделать! Заранее благодарен!

    Всего записей: 2 | Зарегистр. 29-01-2007 | Отправлено: 12:18 29-01-2007
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Огромное спасибо! Работа, которая вами проделана, просто супер!
    Сейчас тестил код дома (на работе буду 31.01), организовав ссылки на другую книгу (*.xls) - все работает! На работе ссылки берутся из другой программы, написанной на Delphi, думаю, все будет ОК! Обратил внимание: если запускать код каждый новый час, то данные копируются в следующий столбец (может быть это идея - получать данные каждый час).
    Так же хочу отблагодаритьYuk и The okk за участие!
    Низкий поклон вам всем и удачи во всем!
     

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 15:55 29-01-2007
    The okk



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

    1. Вид-Панели Инструментов.
    2. На вкладке Команды слева выбираешь Правка.
    3. Справа находишь Бинокль (найти).
    4. Перетаскиваешь бинокль на любую панель инструментов.

    Достаточно кликнуть по биноклю.
    Проще только собственную панель со строкой создать.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 16:02 29-01-2007
    mironmtx

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

    Всего записей: 2 | Зарегистр. 29-01-2007 | Отправлено: 16:06 29-01-2007
    Troitsky



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

    Цитата:
    Обратил внимание: если запускать код каждый новый час, то данные копируются в следующий столбец

    Просто расчет был на то, что запускать скрипт будет только планировщик и в строго отведенное время, потому не делается проверка на четность часа. Так что если запускаться скрипт будет каждый час, сдвиг происходить будет лишь на один, а не на два столбца. Дополнение скрипта (в том числе разного рода проверками), естественно, возможно, но для этого нужно точно определиться с условиями эксплуатации.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 16:10 29-01-2007
    alin



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

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 18:02 29-01-2007
    Pantera3587

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

    Всего записей: 40 | Зарегистр. 20-10-2006 | Отправлено: 19:58 29-01-2007
    OkeaH

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в excel без применения vba можно сделать столбец фложков(что можно было отмечать ложь истина)? Знаю что так можно сделать но вот сделать так не могу уже все пункты меню облазил и бестолоку(::

    Всего записей: 250 | Зарегистр. 22-08-2004 | Отправлено: 22:10 29-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OkeaH
    Вид - Панели Инструментов - Формы. Появится панель с компонентами ActiveX.
    С такими вопросами вообще надо в тему по Excel

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:41 30-01-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OkeaH
    А что потом делать с этими флажками? Анализировать надо? И сколько их предполагается? С ActiveX слишком много не сделаешь. Потом недавно обсуждалась проблема о невозможности их спрятать вместе с ячейками. Если это не проблема - вперед рисовать.
    Можно и без ActiveX, через Worksheet_SelectionChange, но это уже vba.
    Другой вариант - сделать через Данные-Проверка-Лист, хотя это не совсем то.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 09:41 30-01-2007 | Исправлено: Yuk, 09:48 30-01-2007
    The okk



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

    Цитата:
    невозможности их спрятать вместе с ячейками.

    А вот это, кстати, весьма спорно. У него нет свойства Visible?
    Если есть, то спрятать через VBA вполне возможно.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:08 30-01-2007
    evruka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    У меня такая проблема. Приведу пример: Есть два столбца данных: один с названиями, другой с значениями: 0 или 1:
     
    Название 1        0
    Название 2        1
    Название 3        0
    Название 4        1
    Название 5        1
    Название 6        0
    Название 7        0
    Название 8        1
     
    На второй столбец поставил автофильт. Автофильтром управляет кнопка, которая то сворачивает автофильтр с значением 1 то разворачивает его полностью.
    Все работает нормально. Но мне нужно защитить лист. И когда я делаю защиту, то
    кнопка не может управлять автофильтром, хотя в разрешениях я указал, что автофильтр можно использовать. И еще, автофильт работает при защищенном листе, а вот кнопка, с помощью которой я управляю им не работает.
    Вот код кнопки:
     
    Sub CommandButton1_Click()
    If CommandButton1.Caption = "Сгрупировать" Then
    Range("O16:O340").AutoFilter Field:=1, Criteria1:="1"
    CommandButton1.Caption = "Разгрупировать"
    Else
    If CommandButton1.Caption = "Разгрупировать" Then
    Selection.AutoFilter Field:=1
    CommandButton1.Caption = "Сгрупировать"
    End If
    End If
    End Sub

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