Здравствуйте. Помогите, плз. Есть макрос, который отслеживает изменения в конкретных ячейках. Вот его часть:
Private Sub Worksheet_Change(ByVal Target As Range) Dim N_ROW As Long, N_Col As Long Dim DL_ROL As String
If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("S75")) Is Nothing Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True MsgBox "Ячейка информационная, менять нельзя!" End If ...... End Sub
В ячейке S75 находится формула.
Знаю, что можна обойтись защитой листа/книги, но надо без защиты.
Если пользователь делает изменения в ячейке S75, то макрос срабатывает так, как мне надо. Но в том же макросе есть контроль на изменения в других ячейках (допустим А1). И если такие изменения происходят, то макрос расчитывает даные для ячейки А2, а эти данные уже влияют на на результат в ячейке S75. Таким образом получается что при срабатывании макроса при изменении в ячейке А1 сразу срабатывает часть вышеприведенного кода, потому что меняется значение в ячейке S75. Проблема в том, что в офисе 2003 и 2007 все хорошо, а вот в офисе 2010 происходит закрытие екселя без всякой ошибки и сохранения. Я методом исключений части кода нашел, что броблема именно в этой части.
Вопрос: Как заставить макрос реагировать на изменения в ячейке S75, в том случае, если это делает пользователь, а если это изменения в результате изменения исходных данных, внесенных другой частью макроса - то не реагировать. Решение нужно в этом направлении. Изменять настройки екселя не подходит, поскольку файлом полуются клиенты - а им не будешь каждый раз расказывать какие настройки и гдле менять )))
Здравствуйте! Прошу прощение за дурацкий вопрос, но я не знаю как с таким справиться. Когда работает макрос, и его работа связана с записью значений на другом листе (не активном), то происходит переход на другой лист, а потом обратно (потому что на активном тоже надо записывать значения). А так как макросом обрабатывается не малый массив, то таких переходов много - и это вызывает мерцание, и раздражение. Как от этого уйти?
Имею лист St2. Этот лист копируется в новую книгу, и над ним проводятся некоторые действия. Писал макрос для екселя 2003. Все нармально работает. В Екселе 2007 тоже все работает, а вот в екселе 2010 - не работает вот эта часть кода - выдает ошибку 6:
With St2 .Cells.Select Selection.EntireColumn.Hidden = False Selection.EntireRow.Hidden = False End With
Подскажите почему? Чем можно заменить, чтобы работало на всех версиях екселя. Спасибо.
Здравствуйте! Имею базу "Сотрудники". Имею базу "Клиенты", где есть графа сотрудник. В ней можно выбрать с выпадающего списка сотрудника, который работает с даным клиентом. И имею "Рабочую базу", где надо вести записи по определеным взаимодействием с клиентов. В базе можно выбрать Сотрудника, и можно выбрать Клиента с выпадающего списка. Но если сотрудников, скажем, 40 чел., то список нормальной длины, иработать с ним удобно. А вот клиентов сотни, а то и тысячи, и работа с выпадающим списком очень даже не удобная. Возможно ли сделать так, чтобы при открытии выпадающего списка - там отображались только клиенты сотрудника, который выбран в поле Сотрудник. Это даст два больших плюса: 1) меньше спимок для выбора; 2) исключит ошибку ввода клиента другого сотрудника (хотя эту ошибку могу и отсеживать другим способом). Ребята, если есть идеи как это сделать - помогите, пожалуйста. Конечно, если есть возможность силами формул - то класно, но если маросом - тоже супер. А вообще подозреваю, что только через дополнительную пользовательскую форму. Пример прикрепляю.
Здравствуйте! Как-то мне понадобилось просуммировать диапазон с шагом через две ячейки. Долго искал, были варианты, но решил написать свою функцию SumStep. =SumStep(диапазон, шаг_по_колонкам, шаг_по_строкам). Можно выделять строку, столбец, или другой массив с несколькими строками и столбцами. Просуммируются только ячейки в столбцах с шагом "шаг_по_колонкам" и строках "шаг_по_строкам". Отсчет и Суммирования начинается с первой ячейки диапазона. Все параметры обязательны. Если в параметрах задать нули, то будет проведено сумирование всего диапазона. Смотрите, пользуйтесь, а если можете упростить, или улудшить функцию - СПАСИБО. Вот код функции, может кому то понадобиться... )
Function SumStep(rg As Range, step_column As Long, step_row As Long) As Double Dim summa As Double summa = 0 With ActiveSheet If step_row = 0 And step_column = 0 Then summa = WorksheetFunction.Sum(rg) End If
If step_row = 0 And step_column <> 0 Then For x = 1 To rg.Rows.Count For y = 1 To rg.Columns.Count Step step_column summa = summa + rg(x, y).Value Next y Next x End If
If step_row <> 0 And step_column = 0 Then For x = 1 To rg.Rows.Count Step step_row For y = 1 To rg.Columns.Count summa = summa + rg(x, y).Value Next y Next x End If
If step_row <> 0 And step_column <> 0 Then For x = 1 To rg.Rows.Count Step step_row For y = 1 To rg.Columns.Count Step step_column summa = summa + rg(x, y).Value Next y Next x End If
Имею балансы двух разных филлиалов. Создал Отдельный файл с итоговым балансом, куда подтягиваются данные из двух других файлов. В этом итоговом файле сделал возможность выбора (в ячейке А2) отображение данных в гривнах с копеками, в тыс. гривен, и в тыс гривен с одним знаком. Пока источники (файлы с балансами филиалом) открыты и есть с ними связь - проблем нет - всё классно работает. Но сводный файл надо отправлять начальству. И если открыть сводный файл без источников - то при изменении в ячейке А1 не наход источника и выдает ошибку.
Могу решить проблему создание еще одного листа (Техлист), куда будут подтягиваться данные с источников. Этот лист (Техлист) будет служить источником для листа "Баланс", и данные на доп. листе менятся не будут, даже если файлов-источников рядом нет.
Подскажите, можно решить проблему без создание Техлиста, и так чтобы формулы ячейках листа "Баланс" не менялись?
Есть диапазон значений 1 (цифрофых) В1:В37. К каждой ячейке (или это к значению) есть своя гиперссылка. Также есть диапазон значений 2 (текстовых) А1:А37, но они БЕЗ гиперссылок.
Подскажите, как мне скопировать только гиперссылки с первого диапазона в другой? соответственно с В1 в А1, с В2 в А2 и т.д. Спасибо!
Как запустить макрос при изменении в ячейке знаю. :) Вопрос вот в чем: Можно ли отслеживать изменения в ячейке сделаные пользователем, а не макросом? И как?
Дело в том, что мне надо в ячейке (А1) из списка выбрать значение, а потом запустить макрос. Но этот макрос в процессе своей работы должен изменить выбраное значение в ячейке А1 на формулу. И тут получается цикл... Надо, чтобы макрос реагировал ТОЛЬКО на изменения, сделаные пользователе, а не макросом. Спасибо!
Здравствуйте! Есть два листа - Лист1 и Лист2 На Лист1 есть список адресов с гиперссылками на Лист2 в ячейки А1, А45, А90.... и т.д. Мне нужно, чтобы при переходе по гиперссылке на Лист2 в ячейки А45, А90... и др. строка, соответственно 45, 90... была вверху отображаемой части листа на екране. Если плохо задал вопрос - попробую уточнить. Може кто подскажет, как это сделать?
Есть список компаний на листе "Компании" Создан именнованый диапазон (Kompany), указывающий на заполненные названиями компаний ячейки в столбце А этой вкладки. На листе "Лист2" создан выпадающий список для всех ячеек столбца "А" с помощью Меню-Данные-Проверка. Источником для выпадающего списка служит именованный диапазон Kompany. В примере список маленький, и при заполнении столбца "А" листа "Лист2" легко его выбирать с випадающего списка. А в рабочем файле, который я не могу переслать, компаний уже около 1000 - естественно их тяжело выбирать из списка, к томуже размер выпадающего списка изменить нельзя. Я хочу реализовать поиск в именованном диапазоне Kompany во время ввода данных в ячейку с выпадающим списком, и при нахождении соответствуещего значения предлагать автозавершение ввода в ячейку, а лучше список подходящих значений. Понимаю, что, возможно это не риально, посколько уже были здесь такие попытки, но все же хочу попробовать. И наверное эта процедура получиться не маленькой. Поэтому я обращаюсь за помощью к Вам, и буду спрашивать поэтапно.
Итак, первый мой вопрос к Вам:
1. Можно ли считывать вводимые данные в любой ячейке столбца "А" в, скажем, текстовую переменную? Именно вводимые, когда ещё редактирование ячейки не завершено.
При одиночном щелчке проводит изменения только в неактивной ячейке. Если не прибегать к двойному щелчку, а все же использовать одиночный, то что надо дописать, чтобы проводились изменения и в активной ячейке. И также, хочу чтобы в активной ячейке менять значения нажатием клавиши "пробел".
При открытии книги срабатывает макрос - отключает автовычисление.
Как в макросе указать вычисление только для одной ячейки, где есть формула? Знаю, что команда [A:B].Calculate запыскает вычисление для столбцов А и В, а вот как запустить для одной конкретноя ячейки - не знаю. Мопогите, плз.
У меня работает макрос, в котором есть и коды вычислений значений, и включение автовычисление на определенных листах в определенный момент. Все это занимает заметное время! Я хочу, чтобы в это время пользователь видел, что прормамма работает, и не повысла. Как можно включить толи заставку, толи уведомление о том, что работает макрос? И еще чтобы можно было в этом уведомлении указывать на какой стадии выполнения макрос.
Имеютя два листа с таблицами. В этих табица есть формулы, которые ссылаются на другие листы в этой же книге, и есть формулы массива. Автоматическое вычисление оключено. Использую ручное вычисление. Все работало нормально, но в один момент что-то перекосилось. Один лист вычисляется быстро, а другой может полчаса-час висеть на вычислении... Кто может подсказать, в чем может быть проблема?
Ещё на нескольких листах есть столбики, где все ячейки - выпадающий список с наименованием листов, взят с листа "Оглавление". Как сделать так, чтобы при выборе какого-то значения в комбобоксе, это значение тоже было с гиперссылкой такой, как на листе "Оглавление"?
Прочитал темы: 1) http://www.planetaexcel.ru/forum.php?thread_id=4354 2) http://www.planetaexcel.ru/tip.php?aid=49 3) http://www.planetaexcel.ru/tip.php?aid=29 Понравился способ "Оглавление книги Excel" (2). Но есть вопрос. Можно ли сделать что-то на подобии плавающего уведомления (окна, листа), в котором будет этот список листов. Но чтобы этот плавающий список был виден на любом листе - всегда поверх листом в конкретной книге одной книге, а не всех открытых книгах? Знаю вариант с ссылкой на каждом листе на лист оглавления - не совсем подходит такой вариант :)
Хочу, чтобы, при открытии книги, этот список обновлялся
З.Ы. Извините, что есть дубль этой темы в ветке "чего не хватает...." - случайно...
Использую в макросах циклы. В основном вот так: For SU = 6 To ShU.Cells(Rows.Count, 2).End(xlUp).Row ' процедура Next SU ShU - это лист, и он раньше объявлен. Цикл проходит все строки с 6-по по последнюю заполненую в столбце "В". Вопрос: Мне надо ОБРАТНЫЙ цикл - с последней строки по 6 - как это сделать?
Есть столбец формата дата. Когда вводишь дута дату, то выдает ошибку о формулах (точно не помню, не у меня:) )когда пытаюсь ввести дату через дефис "-", то автоматически проставляет знак равенства перед введеными даными, и считает результат... Что это может быть, как исправить, чтобы можно было нормально вбить, скажем 21.2, нажать ентер, и значение было бы 21.02.2011 ?
Ребята, совсем недавно видел тему, и в ней пример с макросом. Там была реализована функция, которая фозвращает нужную строчку из ячейки с 5-ю строками. Нужно для работы с отчетами с 1С. Я уже час убил на поиски в темах-не нашел. Может кто помнит где это, или подскажет как реализовать? Спасибо.
Есть макрос. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Услуги" Or Sh.Name = "Оплаты" Then Range("A6:A20000").ClearContents Worksheets("Клиенты").Range("B4:B20000").Copy Range("A6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=True, Transpose:=False Application.CutCopyMode = False Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Range("C3").Select Cells(Cells(Rows.Count, Selection.Column).End(xlUp).Row + 1, Selection.Column).Select End If
End Sub
При активации листа "Оплаты" копирует с листа "Клиенты" список клиентов и сортирует его только по столбцу "А", не затрагивая остальные столбцы. Это делается как раз для сотрировки, потому что на листе "Клиенты" сортировать нельзя.
На листе "оплаты" существет массив данных, в котором используется автофильтр. Так вот, если покинуть страницу с отфильтрованными, а потом вернуться, - то макрос при активации "подвисает". Он срабатывает, но достаточно долго. Если же автофильтр не задействован, то все быстро.
Есть два листа (Л1, Л2). На первом листе можно сказать база операций. Мне нужно копировать данные с Л1 на Л2, но только те, которые отвечают условию - периоду (дата начала периода и его окончания указана в отдльных ячейках). Я хочу создать цикл, в котором значения читались в Л1 скажем с 6-й строки и до последней заполненой строки (или до строки с последним значением столбца "В").
Если в какой-то строке в столбце, скажем "Е", дата соттветствует заданому периоду, то с этой строки нужно скопировать не все данные, а с отдельных столбцов (С,Д,Е,Ф), и вставить их в Л2 в первую пустую строку в определенные ячейки (но тоже ниже 5-й строки, начиная с 6-й).
1. Как мне создать цикл перебора строк в Л1? (через For) 2. Как определить первую пустую строку в Л2, и вставить даннее в определенные ячейки этой строки?
Я уже создавал тему по вопросу вычисления в отдельных столбца - Огромное спасибо за мопощь, использовал рекомендации от Казанский - [A:B].calculate (для пересчета ст. А и В текущего листа.
Теперь стоит вопрос в другом. При активации листа у меня срабатывает макрос вычисления в столбцах А,В, как описал выше. Но, к тому же там работает макрос на вычисления при изменении любой ячейки, и получается так, что при активации листа вычисление запускается два раза - не порядок. Скажите, как произвести вычисление, если изменения были НЕ в любой ячейке, а скажем в ячейках столбцов С,D,E, или в любых кроме А и В?
Есть формула массива: =СУММ(($F$6:$F$5000>=$A$3)*($F$6:$F$5000<=$A$5)*($C$6:$C$5000=$A9)*($G$6:$G$5000)) где, $F$6:$F$5000 - дата $C$6:$C$5000 - номера клиентов (не повторяются) $G$6:$G$5000 - собственно массив для суммирования
Как видете масив состоит из 5000 значений.
Подскажите, возможно как-то автоматически указывать вместо 5000 то количесто, которое есть на самом деле в массиве (кол-во значений в массиве будет меняться)?
Работаю в ексель 2003. При выключении автовычисления - оно выключается не в книге, а в самом екселе. Если открыть другую книгу, то и там быдет выключено автовычисление. КАК выключать автовычисление для конкретной книги?
Есть книга с многими листами. На одном из листов применена "волшебная формула массива" {=СУММ((Оплаты!$F$6:$F$500>=$A$3)*(Оплаты!$F$6:$F$500<=$A$5)*(Оплаты!$C$6:$C$500=$A26)*(Оплаты!$L$6:$L$500))} ( http://www.planetaexcel.ru/tip.php?aid=79 ).При том она применена в большом количестве ячеек. Естественно, что при автоматическом вычислении - БОЛЬШИЕ тормоза.... И к тому же со временем массивы увеличатся. Я отключил автовычесления. Но, есть на этом листе с формулами массива два столбца (А и В), в которых хотелось бы, чтобы все таки работало автовычисление (там другие формулы)... Вопрос: Как заставить ексель делать вычисления только в двух столбцах?
Здравствуйте. Есть у меня таблица с шапкой, диапазоном А1:Е5. Закрепляю область, чтобы шапка была видна всегда - ВСЕ ПОЛУЧАЕТСЯ. Вопрос вот в чем: при закреплении области закрепляются 5 строк на всех столбца, а я хочу, чтобы закрепление было только на столбцах таблицы (А:Е), а на столбце F и далее уже не закрепляль, там есть другие даные, которые я хочу видеть всегда... Возможно ли такое? Если да, то как?