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

Страницы: 1 2 3 След.
Отслеживание изменений в ячейке, Вылетает в офисе 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
моргание экрана при работе макроса
 
Спасибо! сходу не скажу, но я почти всегда пользуюсь (так стараюсь, так мне удобно) только

Dim TN_R As Long, TN_C As Long, TO_C As Long, TO_R As Long
Dim ShS As Worksheet, ShO As Worksheet

Set ShS = Sheets("Счета" ;)  
Set ShO = Sheets("Оплаты" ;)  ' Активный лист
' ....
ShS.Cells(TN_R, TN_C)=ShO.Cells(TO_R, TO_C)
Изменено: Ihor Seredyuk - 20.02.2013 22:23:39
моргание экрана при работе макроса
 
Спасибо!
моргание экрана при работе макроса
 
Здравствуйте!
Прошу прощение за дурацкий вопрос, но я не знаю как с таким справиться.
Когда  работает макрос, и его работа связана с записью значений на другом листе (не активном), то происходит переход на другой лист, а потом обратно (потому что на активном тоже надо записывать значения). А так как макросом обрабатывается не малый массив, то  таких переходов много - и это вызывает мерцание, и раздражение. Как от этого уйти?
Ошибка при выполнении макроса в Екселе 2010
 
Спасибо. Проблема решилась. Я просто пользовался макроридером, и для того, чтобы отобрязить все скрытые столбцы - выделял всю таблиц. А в 2010 походу не смог выделить всю таблицу. Но хорошо что есть и другой вариант :) Ещё раз, СПАСИБО!
Ошибка при выполнении макроса в Екселе 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
Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником
 
{quote}{login=wilddaemon}{date=09.12.2011 02:32}{thema=Re: Re: Re: Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником}{post}меню- правка -связи{/post}{/quote}  
Да, есть такое. Спасибо.  
 
НО!  
 
Теперь не меняется отображение в тыс., в ривнах и т.д.  
 
Наверное баз источника, или временной копии данных в том же сводном файле - не обойтись...
Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником
 
{quote}{login=wilddaemon}{date=09.12.2011 02:16}{thema=Re: Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником}{post}{quote}{login=i.s.o}{date=09.12.2011 01:58}{thema=Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником}{post}  
Пример вложен.  
 
З.Ы.{/post}{/quote}  
(Данные -> Связи -> Разорвать связи).{/post}{/quote}  
 
Ексель 2003 - В меню "Данные" нет подменю "Связи"
Изменения формата чисел в ячейках с формулами в итоговом файле без связи с источником
 
Имею балансы двух разных филлиалов. Создал Отдельный файл с итоговым балансом, куда подтягиваются данные из двух других файлов. В этом итоговом файле сделал возможность выбора (в ячейке А2) отображение данных в гривнах с копеками, в тыс. гривен, и в тыс гривен с одним знаком.  
Пока источники (файлы с балансами филиалом) открыты и есть с ними связь - проблем нет - всё классно работает. Но сводный файл надо отправлять начальству. И если открыть сводный файл без источников - то при изменении в ячейке А1 не наход источника и выдает ошибку.  
 
Могу решить проблему создание еще одного листа (Техлист), куда будут подтягиваться данные с источников. Этот лист (Техлист) будет служить источником для листа "Баланс", и данные на доп. листе менятся не будут, даже если файлов-источников рядом нет.    
 
Подскажите, можно решить проблему без создание Техлиста, и так чтобы формулы ячейках листа "Баланс" не менялись?  
 
Спасибо!  
 
Пример вложен.  
 
З.Ы.
Копирование гиперссылок
 
{quote}{login=Юрий М}{date=17.08.2011 11:26}{thema=Re: }{post}{quote}{login=i.s.o}{date=17.08.2011 11:13}{thema=}{post}Даю файлик{/post}{/quote}Прежде чем ещё давать - загляните в Правила.{/post}{/quote}  
 
Прошу прощения, что сразу не вложил файлик, и за некоректное сообщение "Даю файлик"... Правила читал, и неоднократно. Я, наверное, не прав, но посчитал, что для такого вопроса пример необязателен.
Копирование гиперссылок
 
{quote}{login=гость}{date=17.08.2011 11:24}{thema=Re: Копирование гиперссылок}{post}{quote}{login=i.s.o}{date=16.08.2011 07:12}{thema=Копирование гиперссылок}{post}  
1. копируете А1:А37 например в С1:С37.  
2. в А1:А37 копируете диапазон В1:В37.  
3. в А1:А37 пишете формулу: для А1: =С1 и т.д.  
4. копируете А1:А37 сам в себя как значения.  
В итоге в А1:А37 будут значения его родные, а гиперссылки - из В1:В37{/post}{/quote}  
 
Спасибо!
Копирование гиперссылок
 
Даю файлик
Копирование гиперссылок
 
{quote}{login=Z}{date=16.08.2011 08:08}{thema=Re: Обычное дело - Ctrl+C далее Ctrl+V... А нет - так пример в студию... ;)  
-14754-{/post}{/quote}  
 
в столбике В - цифры (цена), а в столбике А наименование. по Ctrl+C далее Ctrl+V копируется ВСЕ! А мне нужно только гиперссылки, скажем, переподвязать к другим значениям.  
 
Пример сейчас попробую сделать...
Копирование гиперссылок
 
Есть диапазон значений 1 (цифрофых) В1:В37. К каждой ячейке (или это к значению) есть своя гиперссылка.  
Также есть диапазон  значений 2 (текстовых) А1:А37, но они БЕЗ гиперссылок.  
 
Подскажите, как мне скопировать только гиперссылки с первого диапазона в другой? соответственно с В1 в А1, с В2 в А2 и т.д.  
Спасибо!
Запуск макрос при изменении в ячейке.
 
{quote}{login=}{date=19.07.2011 02:01}{thema=}{post}Смысл какой ? Писать"я" ,получить "ты". Лучше ничего не писать.{/post}{/quote}  
 
Объясняю. Смысл в том, что в ячейке А1 стоит формула "ВПР", а искомое значение - это порядковый номер клиента в базе клиентов. Но так как клиентов тысячи - номер не запомнишь. Так же ячейка А1 имеет выпадающий список - это список тех же клиентов из той же базы, но по алфавиту - так проще найти :).  
Пользователь выбирает нужного ему клиента - тут происходит изменение ячейки с формулой. Дальже работает макрос. Он сначала запоминает название клиента в переменную, потом делает отмену последнего действия (так в ячейке А1 снова формула "ВПР"), потом ищит в базе номер клиента с переменной и вписывает в ячейку, куда ссылается формула "ВПР" за искомым_значением.  
Это я спросил о ячейке А1, чтобы легче ориентироваться. На самом деле - это все ячейки столбца "С" - они заполняются пользователем по мере совершения операции.
Запуск макрос при изменении в ячейке.
 
{quote}{login=Юрий М}{date=19.07.2011 02:00}{thema=}{post}Сразу, как определили, что изменившаяся ячейка "Ваша", пишем строку:  
application.enableevents = false  
А перед окончанием процедуры:  
application.enableevents=true{/post}{/quote}  
 
Спасибо! То что надо!
Запуск макрос при изменении в ячейке.
 
Как запустить макрос при изменении в ячейке знаю. :)  
Вопрос вот в чем:  
Можно ли отслеживать изменения в ячейке сделаные пользователем, а не макросом? И как?  
 
Дело в том, что мне надо в ячейке (А1) из списка выбрать значение, а потом запустить макрос. Но этот макрос в процессе своей работы должен изменить выбраное значение в ячейке А1 на формулу. И тут получается цикл... Надо, чтобы макрос реагировал ТОЛЬКО на изменения, сделаные пользователе, а не макросом.  
Спасибо!
Переход по гиперссылкам.
 
{quote}{login=Юрий М}{date=08.07.2011 03:49}{thema=}{post}В модуль листа2:  
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)  
   With ActiveWindow  
        .ScrollRow = .ActiveCell.Row  
        .ScrollColumn = .ActiveCell.Column  
   End With  
End Sub{/post}{/quote}  
 
Большое СПАСИБО, Юрий! Именно то, что надо!  
Только вместо Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)  
поставил Private Sub Worksheet_Activate(), поскольку мне нужно только при активации листа (когда выполняется переход по гиперссылке).
Переход по гиперссылкам.
 
Здравствуйте!  
Есть два листа - Лист1 и Лист2  
На Лист1 есть список адресов с гиперссылками на Лист2 в ячейки А1, А45, А90.... и т.д.  
Мне нужно, чтобы при переходе по гиперссылке на Лист2 в ячейки А45, А90... и др. строка, соответственно 45, 90... была вверху отображаемой части листа на екране.  
Если плохо задал вопрос - попробую уточнить.    
Може кто подскажет, как это сделать?
Поиск подходящих значений в диапазоне и их вывод для выбора
 
{quote}{login=nilem}{date=25.06.2011 06:48}{thema=}{post}"...чтобы искал не только как начало наименования, а все наименования, которые местят в себе вводимую последовательность"  
Для этого в коде есть закомментированная строчка, посмотрите в модуле формы.  
 
"...и ОК вообще упразднить?"  
Нет, без Ок нельзя. ...Как-то плохо без Ок :){/post}{/quote}  
 
Спасибо, все классно работает, Строчку закомментированную нашел.
Поиск подходящих значений в диапазоне и их вывод для выбора
 
{quote}{login=nilem}{date=25.06.2011 06:17}{thema=}{post}Вот такая заготовочка: делаем двойной клик в ст. А, на форме в текстбоксе начинаем забивать наименование, из листбокса выбираем нужное - Ок, наим-е вставляется в дваждыкликнутую:) ячейку.{/post}{/quote}  
 
Спасибо! Это уже что-то. Даже больше! :)  
попробую разобраться, чтобы искал не только как начало наименования, а все наименования, которые местят в себе вводимую последовательность
Поиск подходящих значений в диапазоне и их вывод для выбора
 
{quote}{login=KukLP}{date=25.06.2011 05:38}{thema=Re: Поиск подходящих значений в диапазоне и их вывод для выбора}{post}{quote}{login=i.s.o}{date=25.06.2011 05:31}{thema=Поиск подходящих значений в диапазоне и их вывод для выбора}{post}  
1. Можно ли считывать вводимые данные в любой ячейке столбца "А" в, скажем, текстовую переменную? Именно вводимые, когда ещё редактирование ячейки не завершено.{/post}{/quote}  
Нет. Но если строки без пропусков, то Эксель и так подставляет ближайшее. См скрин.{/post}{/quote}  
 
Мда... Если это не возможно, то дальнейшии вопросы отпадают, и идея умирает.  
 
Эксель подставляе, если уже было введено такое значение в этом же столбце. А у меня все наименования компаний на другом листе. И к тому же очень много названий похожи, скажем к примеру Агростроймаш, Агростройпереработка, Агростройматериалы. В таком случае Ексель, наверное, будет подставлять значение только тогда, когда будет введено Агрострой и следующая буква.  И вводить надо название с первых букв, а у меня все ещё витает идея, чтобы вводить можна было любую часть названия, скажем при вводе "строй" - выводится список из трех названий Агростроймаш, Агростройпереработка и Агростройматериалы, и из них выбирать.  
Проблема открыта, может быть еще есть другие способы, возможно перехват нажимания клавиш фо время ввода, и при перехвате вносить в переменую. :)  
 
Но все равно, Спасибо.
Поиск подходящих значений в диапазоне и их вывод для выбора
 
Есть список компаний на листе "Компании"  
Создан именнованый диапазон (Kompany), указывающий на заполненные названиями компаний ячейки в столбце А этой вкладки.  
На листе "Лист2" создан выпадающий список для всех ячеек столбца "А" с помощью Меню-Данные-Проверка. Источником для выпадающего списка служит именованный диапазон Kompany.  
В примере список маленький, и при заполнении столбца "А" листа "Лист2" легко его выбирать с випадающего списка. А в рабочем файле, который я не могу переслать, компаний уже около 1000 - естественно их тяжело выбирать из списка, к томуже размер выпадающего списка изменить нельзя.    
Я хочу реализовать поиск в именованном диапазоне Kompany во время ввода данных в ячейку с выпадающим списком, и при нахождении соответствуещего значения предлагать автозавершение ввода в ячейку, а лучше список подходящих значений. Понимаю, что, возможно это не риально, посколько уже были здесь такие попытки, но все же хочу попробовать. И наверное эта процедура получиться не маленькой. Поэтому я обращаюсь за помощью к Вам, и буду спрашивать поэтапно.  
 
Итак, первый мой вопрос к Вам:  
 
1. Можно ли считывать вводимые данные в любой ячейке столбца "А" в, скажем, текстовую переменную? Именно вводимые, когда ещё редактирование ячейки не завершено.
Изменения в ячейке по клику
 
Ребята, извините, попробую подетальнее описать вопрос:  
 
В коде отслеживается изменения в ячейках указаного диапазона. У меня это I14:I48  
Кода два - один ,  
 
'CODE 1 Ставим флажок, если был одиночный щелчок по ячейке  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   If Target.Cells.Count > 1 Then Exit Sub  
       If Not Intersect(Target, Range("I14:I48")) Is Nothing Then  
           Target.Font.Name = "Marlett"  
           If Target = "0" Then  
               Target = "a"  
           Else  
               Target = "0"  
           End If  
       End If  
End Sub  
------------------------  
Второй,    
 
'CODE 2 Снимаем флажок, если был двойной щелчок по ячейке  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
   If Not Intersect(Target, Range("I14:I48")) Is Nothing Then  
       Cancel = True 'чтобы не уйти в режим редактирования  
       Target.Font.Name = "Marlett"  
           If Target = "0" Then  
               Target = "a"  
           Else  
               Target = "0"  
           End If  
   End If  
End Sub  
 
--------  
Если курсор мышки находится над неактивной ячейкой указаного диапазона, и его кликнуть один раз - то отрабатывает первый код, меняется значение с "а" на "0", или наоборот; и ячейка становится АКТИВНОЙ. Чтобы в ней опять изменить значение приходится кликнуть по ней дважды, и здесь отработает второй код.  
 
Я хочу уйти от второго кода... Вот и прошу помощи. Как реализовать эти изменения одним кликом в ячейке, если она уже АКТИВНА, а значенияе надо поменять. И также хочу использовать "пробел" для таких же действий в активной ячейке отслеживаемого диапазона.
Изменения в ячейке по клику
 
"А неактивная - это какая?"  
Это та, в которой не находится курсор. :)  
-------  
"На что менять-то значение в активной ячейке при нажатии на пробел?"  
Я ведь дал ссылку на тему, где в коде конкретно указано что на что меняется... :)  
 
Ну да ладно, я понял, хотите пример. ловите.
Изменения в ячейке по клику
 
Здравствуйте, знатоки.  
 
Вот прочитал эту темку - http://planetaexcel.ru/tip.php?aid=36  
Все классно, но хотелось бы чуть-чуть иначе.  
 
При одиночном щелчке проводит изменения только в неактивной ячейке. Если не прибегать к двойному щелчку, а все же использовать одиночный, то что надо дописать, чтобы проводились изменения и в активной ячейке.    
И также, хочу чтобы в активной ячейке менять значения нажатием клавиши "пробел".  
 
Заранее, Спасибо!
АвтоВычисление только в конкретной ячейке
 
{quote}{login=RAN}{date=14.04.2011 06:55}{thema=}{post}Cells(i,"A").Calculate не пробовали?{/post}{/quote}  
Спасибо! К сожалению - не пробовал. А работает :)
Страницы: 1 2 3 След.
Loading...