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

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



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

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 16:21 29-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    filemoto
    Цитата:
    как сохранить её (книгу), чтобы макрос который внутри книги не сохранялся?
    если макрос уже совсем  не нужен - зайти в редактор Visual Basic (Alt-F11) открыть тело макроса и удалить макрос.
    Если в дальнейшем он может понадобится - кинуть его в Персональную книгу макросов (но это не выполнимо для тех макросов, которые завязаны на событиях книги...).

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:58 29-03-2007
    jiurasic84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ВОПРОС:  
    Хочу отследить изменение в какой-либо ячейке в Листе Excel.  Почему, если я пишу код:  
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Target = Range("E5") Then
    Cells(5, 7).Value = Range("E5").Value
    End If
    End Sub
     
    то все нормально, но стоит мне добавить отслеживани изменений еще одной ячейки:  
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Target = Range("E5") Then
    Cells(5, 7).Value = Range("E5").Value
    Cells(5, 8).Value = Range("E5").Value
    End If
    End Sub
     
    как программа при изменениии ячейки зависает. Почему это происходит и как все-таки отслежить зменение ячейки без зависания?

    Всего записей: 3 | Зарегистр. 19-03-2007 | Отправлено: 17:09 29-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jiurasic84
    Цитата:
    программа при изменениии ячейки зависает

    Может процедура сама себя вызывает (когда изменяет ячейку). Попробуйте так:
     Application.EnableEvents = False  
     Cells(5, 7).Value = Range("E5").Value  
     Cells(5, 8).Value = Range("E5").Value  
     Application.EnableEvents = True

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 17:14 29-03-2007
    jiurasic84

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



    Всего записей: 3 | Зарегистр. 19-03-2007 | Отправлено: 17:20 29-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    jiurasic84
     
    Помоему проще так If Target.Address = Range("E5").Address Then
    А возникает ситуация потому, что свойство по умолчанию Value

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:28 29-03-2007
    jiurasic84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обьясните пожалуйста как сделать так чтобы при добавлении сторонних контролов на лист (кнопочек и прочих компонентов НЕ Microsoft) при открытии EXCEL не задавал вопросов по поводу безопасности: мол ActiveX может содержать вирусы и прочее.... Снижение уровни безопасности до минимумма не помогает....все равно спрашивает. а кнопки стандартные - очень некрасивые...

    Всего записей: 3 | Зарегистр. 19-03-2007 | Отправлено: 18:12 29-03-2007
    filemoto



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

    Цитата:
    Если в дальнейшем он может понадобится - кинуть его в Персональную книгу макросов (но это не выполнимо для тех макросов, которые завязаны на событиях книги...).  

     
    пожалуйста, скажите поподробнее...
    суть такая, что редакторша клепает таблицу, пользуется разными макросами, потом этот файл отдаёт юзеру и у узера постоянно траблы с открытием документа в связи с безопасностью. ладно если б юзер один был. а так каждый раз новый...
    скажите, как работать с макросами в документе и при этом сохранять документ без какого-либо кода?
     
     
    Добавлено:
    или может както внешне можно выполнять такой макрос:
    1. в автофильтре ставит все значегия в (ВСЕ) т.е. показывать всё что есть в столбцах
    2. делает активной ячейку "А2"

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 18:48 29-03-2007
    AndVGri

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

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:05 29-03-2007
    kiVAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Yuk
    Следуя вашим советам вот что у меня в итоге получилось:
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Dim i As Integer
    For i = 2 To 10
     
      If Target.Column = "2" Then
       If IsNumeric(Cells(i, 3&).Value) And IsNumeric(Cells(i, 2&).Value) Then
       
       Cells(i, 3&).Formula = "=" & Cells(i, 3&).Value & "-" & Cells(i, 2&).Address
       
       End If
      End If
       
      If Target.Column = "1" Then
       If IsNumeric(Cells(i, 3&).Value) And IsNumeric(Cells(i, 1&).Value) Then
       
       Cells(i, 3&).Formula = "=" & Cells(i, 3&).Value & "+" & Cells(i, 1&).Address
       
       End If
      End If
     
     
    Next i
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub
     
    И всё бы хорошо, но многоуважаемый Excel почемуто пересчитывает значение в С каждый раз когда изменяю данные в любой из строк колонок А или В. мне же надо чтобы он изменял значение в С тогда и только тогда, когда изменены данные в соответствующей строке А или В.

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 20:55 29-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kiVAR
    Глубокоуважаемейший, Вы внимательно посмотрели на свой код? При любом вводе в диапазон ячеек столбца А или В (в 2007, например, 1 до 2 миллионов)  у Вас будут изменяться формулы в столбце С со 2 строки по 10. Поэтому Вам в коде и указали на блокировки обработки событий и обновления экрана. Проще же всё это написать было так
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim iRow As Long
     
    iRow = Target.Row 'получаем строку ввода и только для неё проводим изменения
     
    If Target.Column = 1& Then
        If IsNumeric(Cells(iRow, 1&).Value) And IsNumeric(Cells(iRow, 2&) Then _
            Cells(iRow, 3&).Formula = "=" & Cells(iRow, 3&).Value & "-" & Cells(iRow, 2&).Addres
    ElseIf Target.Column = 2& Then
        If IsNumeric(Cells(iRow, 1&).Value) And IsNumeric(Cells(iRow, 2&) Then _
            Cells(iRow, 3&).Formula = "=" & Cells(iRow, 3&).Value & "+" & Cells(iRow, 1&).Address
    End If
    End Sub
     
    Дополнительно, если необходимо, ввести проверку - находится ли iRow в требуемом диапазоне строк?
    И ещё. Вы проверяете на числовые значения ячейки Cells(iRow, 1&) и Cells(iRow, 2&), а почему не проверяете Cells(iRow, 3&)?  Далее, может имеет смысл добавить и проверку на формулу в ячейке Cell(iRow, 3&)?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:13 30-03-2007 | Исправлено: AndVGri, 04:24 30-03-2007
    filemoto



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

    Цитата:
    Собери все макросы в отдельную новую книгу. Подключи их к кнопкам новой панели инструментов. Вложи панель в эту книгу и сохрани как надстройку Excel. Потом эту надстройку можно будет подключить у секретарши, а все остальные макросы у неё удалить. Тогда все остальные документы будут без макросов, а функциональность работы не измениться

     
    а как это правильно сделать?
    я создал новую книгу. закинул туда макрос.  
    привязал к кнопке на панели.
    сохранил как надстройка, получился файл с расширением *.xla, (myMcro.xla)
    потом открываю файл, тот к которому нужно применить код макроса, нажимаю кнопку,  
    и выскакивает ошибка файл Книга1.xls не найден.
     

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 11:44 30-03-2007
    Olive77

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

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 12:01 30-03-2007 | Исправлено: Olive77, 12:03 30-03-2007
    filemoto



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

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 12:47 30-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    filemoto
    Перед тем как сохранять в xla. На созданной панели инструментов, щёлкаешь правой клавишей, выбираешь в контекстном меню "Настройка". В диалоге щёлкаешь кнопку "вложить", выбираешь свою панель слева и нажимаешь копировать.
    После того как сохранил в xla и закрытия исходной книги (или, если вышел без сохранения). В настройках панели удали вновь созданную панель, чтобы она не вызывалась из файла xls. Надстройка xla добавляется затем: меню Сервис/надстройки в диалоге кнопка "обзор". После подключения xla панелька появиться и будет связана с xla

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 12:58 30-03-2007
    Farest

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите как создать кнопку в Ехселе
    тоесть нужно если нажал на неё то в другом поле он пересчитал значение

    Всего записей: 119 | Зарегистр. 07-05-2006 | Отправлено: 13:48 30-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Farest
    В строке поиска справки Excel так и набери "создать кнопку" и будет счастье

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 13:51 30-03-2007
    filemoto



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    SERGE_BLIZNUK
    Olive77
     
    Ребята, большое спасибо.
    Всё получилось.
    Чёрт, столько знаком с екселем, а этого момента никогда незнал.

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 13:58 30-03-2007
    Farest

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

    Цитата:
    В строке поиска справки Excel так и набери "создать кнопку" и будет счастье

    Чесно сказать не нашёл
    у меня офис 2007

    Всего записей: 119 | Зарегистр. 07-05-2006 | Отправлено: 14:31 30-03-2007
    kiVAR

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

    AndVGri

    Цитата:
    Вам в коде и указали на блокировки обработки событий и обновления экрана

    ну так я вроде как их и вставил

    Цитата:
    Application.EnableEvents = False  
    Application.Calculation = xlCalculationManual  
    Application.ScreenUpdating = False

     

    Цитата:
    Проще же всё это написать было так

    написал, блокировки в самое начало поставил.  
    ну всё равно, ввожу я в другую строку, а он мне все значения пересчитывает

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 15:13 30-03-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