Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Отслеживание изменений в ячейке, Вылетает в офисе 2010
 
Здравствуйте. Помогите, плз.
Есть макрос, который отслеживает изменения в конкретных ячейках. Вот его часть:


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, в том случае, если это делает пользователь, а если это изменения в результате изменения исходных данных, внесенных другой частью макроса - то не реагировать. Решение нужно в этом направлении. Изменять настройки екселя не подходит, поскольку файлом полуются клиенты - а им не будешь каждый раз расказывать какие настройки и гдле менять )))

Спасибо.
Изменено: Ihor Seredyuk - 10.06.2013 18:31:13
моргание экрана при работе макроса
 
Здравствуйте!
Прошу прощение за дурацкий вопрос, но я не знаю как с таким справиться.
Когда  работает макрос, и его работа связана с записью значений на другом листе (не активном), то происходит переход на другой лист, а потом обратно (потому что на активном тоже надо записывать значения). А так как макросом обрабатывается не малый массив, то  таких переходов много - и это вызывает мерцание, и раздражение. Как от этого уйти?
Ошибка при выполнении макроса в Екселе 2010
 
Имею лист 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  
     
SumStep = summa  
     
   End With  
End Function
Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником
 
Имею балансы двух разных филлиалов. Создал Отдельный файл с итоговым балансом, куда подтягиваются данные из двух других файлов. В этом итоговом файле сделал возможность выбора (в ячейке А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. Можно ли считывать вводимые данные в любой ячейке столбца "А" в, скажем, текстовую переменную? Именно вводимые, когда ещё редактирование ячейки не завершено.
Изменения в ячейке по клику
 
Здравствуйте, знатоки.  
 
Вот прочитал эту темку - http://planetaexcel.ru/tip.php?aid=36  
Все классно, но хотелось бы чуть-чуть иначе.  
 
При одиночном щелчке проводит изменения только в неактивной ячейке. Если не прибегать к двойному щелчку, а все же использовать одиночный, то что надо дописать, чтобы проводились изменения и в активной ячейке.    
И также, хочу чтобы в активной ячейке менять значения нажатием клавиши "пробел".  
 
Заранее, Спасибо!
АвтоВычисление только в конкретной ячейке
 
При открытии книги срабатывает макрос - отключает автовычисление.  
 
Как в макросе указать вычисление только для одной ячейки, где есть формула?  
Знаю, что команда [A:B].Calculate запыскает вычисление для столбцов А и В, а вот как запустить для одной конкретноя ячейки - не знаю. Мопогите, плз.
"Заставка" во время работы макроса
 
У меня работает макрос, в котором есть и коды вычислений значений, и включение автовычисление на определенных листах в определенный момент.  
Все это занимает заметное время!    
Я хочу, чтобы в это время пользователь видел, что прормамма работает, и не повысла.  
Как можно включить толи заставку, толи уведомление о том, что работает макрос?  
И еще чтобы можно было в этом уведомлении указывать на какой стадии выполнения макрос.
Очень долго проходит вычисление
 
Имеютя два листа с таблицами. В этих табица есть формулы, которые ссылаются на другие листы в этой же книге, и есть формулы массива. Автоматическое вычисление оключено. Использую ручное вычисление. Все работало нормально, но в один момент что-то перекосилось. Один лист вычисляется быстро, а другой может полчаса-час висеть на вычислении... Кто может подсказать, в чем может быть проблема?
Гиперссылки
 
Есть лист "Оглавление" со списком листов с гиперссылками, сделаный так (http://www.planetaexcel.ru/tip.php?aid=49)  
 
Ещё на нескольких листах есть столбики, где все ячейки - выпадающий список с наименованием листов, взят с листа "Оглавление". Как сделать так, чтобы при выборе какого-то значения в комбобоксе, это значение тоже было с гиперссылкой такой, как на листе "Оглавление"?
Список листов.
 
Прочитал темы:  
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 и далее уже не закрепляль, там есть другие даные, которые я хочу видеть всегда... Возможно ли такое? Если да, то как?
Страницы: 1
Наверх