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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evruka
    На вскидку - надо разрешить макросу работать с защищенным листом.
    Тут либо ActiveSheet.Unprotect - снять защиту с листа, либо ActiveSheet.Protect UserInterfaceOnly := True (не защищать от изменений, вносимых макросом).

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:34 30-01-2007 | Исправлено: The okk, 12:35 30-01-2007
    evruka

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

    Цитата:
    На вскидку - надо разрешить макросу работать с защищенным листом.  
    Тут либо ActiveSheet.Unprotect - снять защиту с листа, либо ActiveSheet.Protect UserInterfaceOnly := True (не защищать от изменений, вносимых макросом).

    Подскажите, где и как это нужно записать

    Всего записей: 7 | Зарегистр. 30-01-2007 | Отправлено: 13:38 30-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evruka
    Я в свое время в события это записывал. Например, открываешь код книги и туда в событие Workbook_open прописываешь нужные блокировки/разблокировки.
    Но мой тебе совет - сто раз подумай, прежде чем связаться с защитой листа/книги/и т.д. Я с этой защитой жутко тогда намучился - UserInterfaceOnly это очень подлая вещь. Сбрасывается при каждом закрытии книги. Так что каждый раз при открытии надо отключать.
     
    Добавлено:
    Но можешь просто отдельный макрос создать. Например:
    Код:
     
    Sub СнятьЗащиту()
    ActiveSheet.Protect UserInterfaceOnly := True
    End Sub

    И каждый раз запускать, когда нужно открыть доступ к листу твоим макросам.

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



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

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

    Спрятать то можно, но как сделать это одновременно со столбцом, например. Нет события на сокрытие ячеек. Единственный выход делать макрос, прячущий одновременно ячейки и контроли в них. И другой макрос на обратные действия.
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:55 30-01-2007
    The okk



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

    Цитата:
    Спрятать то можно, но как сделать это одновременно со столбцом, например.

    Ну, если проявить фантазию, то можно и не такое сделать.
    Делаем следущее:
    1. Делаем где-нибудь ячейку с формулой (или скрытый столбец с формулами), выдающей логическое Да/нет в зависимости от видимости ячейки. Такую функцию не сложно написать на VBA, только надо не забыть про Application.Volatile, чтобы автоматически пересчитывалась.
    2. Теперь можно спокойно делать событие Worksheet_Change, где проверять  
    If Not Intersect(Target,Range(диапазон_с_нашими_формулами)) Is Nothing Then...
    Все. Если там что-то изменилось, значит, где-то скрылись/отобразились ячейки.
    Вот такая идея вкратце.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 06:57 31-01-2007 | Исправлено: The okk, 08:01 31-01-2007
    Yuk



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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Гыыы Еще полгода изучения VBA и стану крутым, как Уокенбах, буду книжки писать и сделаю надстройку еще более навернутую, чем PUP

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



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
    а что за надстройка PUP ???

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 11:39 31-01-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jONES1979
    Power Utility Pak
    Автор: Джон Уокенбах
     
    Добавлено:
    А кроме шуток - пора бы уже сделать одну серьезную надстройку, включающую в себя все существующие полезные надстройки + собственные наработки (доп.панели, доп.конструкторы, конструкторы различных итоговых форм и т.д.), как это в свое время сделал Уокенбах.
     
    Добавлено:
    mironmtx

    Код:
     
    Sub ДобавитьПанельПоиска()
        Dim msBtn As CommandBarButton
        Dim msTxt As CommandBarControl
     
        Application.ScreenUpdating = False
     
        On Error Resume Next
        Application.CommandBars("Поиск").Delete
        On Error GoTo 0
        Application.CommandBars.Add(Name:="Поиск").Visible = True
     
        With Application.CommandBars("Поиск")
            .Position = msoBarTop
            With .Controls
                Set msBtn = .Add(Type:=msoControlButton)
                With msBtn
                    .Caption = "Поиск"
                    .FaceId = 46
                    .OnAction = "Поиск"
                End With
                Set msTxt = .Add(Type:=msoControlEdit)
            End With
        End With
        Application.ScreenUpdating = True
    End Sub
     
    Private Sub Поиск()
    Dim Cell As Range
    Set Cell = ActiveSheet.UsedRange.Find(Application.CommandBars("Поиск").Controls(2).Text)
    If Not Cell Is Nothing Then Cell.Select
    End Sub

    ВОТ, что бывает, когда пытаешься изобрести велосипед, когда все уже рассекают на новеньких Бумерах Это я к тому, что управление у велосипеда, конечно НАМНОГО проще, да вот только и геморроя тоже больше . Так же и тут - работать будет, НО только если будешь задавать поиск *строка_поиска*. Если подработать процедуру поиска, можно, конечно, добиться вполне достойных результатов, НО результат не стоит потраченного времени. - Золотое правило VBA: если можешь обойтись без VBA, обойдись

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    у меня на работе написал кто то когда давно макрос и поставил пароль. Макрос устарел слегка и никто не помнит парля. Можно как то сломать?
     
    Добавлено:
    помогите написать макрос. Надо вот что: например Ячейка  А7, в ней написано Вася хороший мальчик. Надо, чтобы слово хороший переносилось на ячейку или две не важно на сколько вниз например на А8.

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



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

    Цитата:
    у меня на работе написал кто то когда давно макрос и поставил пароль. Макрос устарел слегка и никто не помнит парля. Можно как то сломать?

    Avanced Office Password Recovery и иже с ним
     
     
    Добавлено:

    Цитата:
    помогите написать макрос. Надо вот что: например Ячейка  А7, в ней написано Вася хороший мальчик. Надо, чтобы слово хороший переносилось на ячейку или две не важно на сколько вниз например на А8.

    А в ячейке A7 оставалось "Вася мальчик"?
    И так нужно для всех ячеек документа?
    Слово известно или такое проворачивается именно со вторым словом в каждой ячейке?
     
    Больше конкретики.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 17:36 31-01-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К слову о надстройках.
     
    Да простят меня модераторы, но в варезнике появился кряк для DigDB. Кому интересно. Сам пока не пробовал, правда.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Передача данных из Excel в MS-SQL или Access
     
    Проблема в том что есть калкуляция цены в Excel и надо резултат передать в базу данных.
    В Excel-таблице есть ячейка("ArtNr") с номером товара,
    и цена в ячейке ("preis")  
     
    Нужно  по нажатию на кнопку таблицыExcel,  в базе днных "SQL" в таблице "dtbLager" найти товар с номером соответствующем номеру в таблице-Еxcel и прописать в бд"SQL" в таблице "dtbLager"
    в столбце"VKPreis"  цену из Excel-таблицы ячейки ("preis") .  
     
    !!! Помогите пожалуста найти решение !!!!!!

    Всего записей: 1 | Зарегистр. 13-06-2006 | Отправлено: 13:07 01-02-2007 | Исправлено: Ital_Martal, 13:34 01-02-2007
    dunamis

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    А в ячейке A7 оставалось "Вася мальчик"?  
    И так нужно для всех ячеек документа?  
    Слово известно или такое проворачивается именно со вторым словом в каждой ячейке?  
     
    Больше конкретики.
     
    Слово известно при чем не факт, что оно будет второе в предложении, оно может быть третим или четвертым

    Всего записей: 5 | Зарегистр. 31-01-2007 | Отправлено: 14:39 01-02-2007
    Anton T

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

    Код:
    Sub rlock()
    Dim ws As Worksheet
    Dim i As Integer
    Set ws = Application.ActiveSheet
    'Отключение защиты
    ws.Unprotect
    'Удаление всех диапазонов, защищенных в данный момент
    For i = 1 To ws.Protection.AllowEditRanges.Count
    ws.Protection.AllowEditRanges(i).Delete
    Next
    'Создание защиненного диапазона
    ws.Protection.AllowEditRanges.Add Title:="Заголовок", Range:=Range("A1:A4"), Password:="hide"
    'Защита листа (иначе защита диапазона не будет включена)
    ws.Protect
    End Sub
     

    P.S. Лучше прочитать "Использование макросов в Excel"
     
    Добавлено:
    Как сделать проходит(ProgressBar) считать строки ?

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 18:05 01-02-2007 | Исправлено: Anton T, 18:50 01-02-2007
    ZORRO2005



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как сделать так чтобы список в столбце A
    Допустим A1:A20
    превратился в 20 листов,где имена это значения в ячейках.

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 13:18 02-02-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Код:
     
    Sub CreateSheets()
        Dim Cell As Range
        Dim wsNewSheet As Worksheet
     
        On Error Resume Next
        Application.ScreenUpdating = False
        For Each Cell In [A:A].SpecialCells(xlCellTypeConstants)
            Set wsNewSheet = Worksheets.Add
            wsNewSheet.Name = Cell
            If Err <> 0 Then _
               wsNewSheet.Name = InputBox( _
               "Лист с таким именем уже существует. Введите другое имя", _
               "Ошибка")
        Next Cell
        Application.ScreenUpdating = True
    End Sub

     
    Anton T

    Цитата:
    Как сделать проходит(ProgressBar) считать строки ?

    А поконкретней?
    Извини - занят был просто. Конец месяца - тестили мою прогу, находились глюки, не оговоренные в техзадании, приходилось вносить изменения. Сегодня только свободные пару часов появились. Я нашел табличный контрол, превосходящий ListView по качеству и, что немаловажно, простоте. Называется Microsoft Office Spreadsheet 10. Это мини-Excel. Выгодно отличается от ListView тем, что легко и непринужденно работает с массивами, опознает Range (поскольку является "младшим братом" Excel), может превращаться как в ListView, так и в ListBox простым отключением возможностей, имеет встроенный метод экспорта содержимого в xml-файл и т.д. Хотя, конечно, не без недостатков: не понимает стиль ссылок R1C1, не знаком с Автозаполнением и, если не ошибаюсь, не знаком с методом Range.Resize. Но, в целом, работать ОЧЕНЬ удобно и приятно. Все свои формы с ListView перевел на SpreadSheet за час - разбираться-то не надо - все, как в экселе (только ячеек поменьше).

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

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

    Цитата:
    Как сделать так чтобы список в столбце A  
    Допустим A1:A20  
    превратился в 20 листов,где имена это значения в ячейках.  

     
    Sub Макрос1()
        Dim LastRow As Long, r As Long
        'Определяем последнюю строчку
        LastRow = Range("A65536").End(xlUp).Row
        For r = 4 To LastRow 'имеется ввиду, что три листа есть
            Sheets.Add
        Next r
    End Sub

    Всего записей: 109 | Зарегистр. 18-12-2006 | Отправлено: 14:51 02-02-2007
    ZORRO2005



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
    Спасибо.
    А можно сделать так чтобы листы добавлялись в конец а не в начало
    и чтобы они шли по порядку,а не в обратном порядке.
    Т.е.
    Если есть Лист1
    В A1:A4 (Январь,Февраль,Март,Апрель)
    То чтобы листы были в таком порядке:
    Лист1,Январь,Февраль,Март,Апрель  
    а сейчас
    Апрель,Март,Февраль,Январь,Лист1
    Заранее спасибо

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 14:54 02-02-2007
    Paul1204

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Подскажите начинающему. У меня данные в таблицу поступают из интернета в реал-тайме. Мне нужно чтобы если значение в какой-то ячейке становилось, допустим, меньше ноля, то это бы выделялось красным цветом шрифта.
    Заранее благодарен. Собатие Private Sub Worksheet_Change(ByVal Target As Range) не работает, а  только при вводе значения вручную.

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