Здравствуйте. Помогите, плз. Есть макрос, который отслеживает изменения в конкретных ячейках. Вот его часть:
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, в том случае, если это делает пользователь, а если это изменения в результате изменения исходных данных, внесенных другой частью макроса - то не реагировать. Решение нужно в этом направлении. Изменять настройки екселя не подходит, поскольку файлом полуются клиенты - а им не будешь каждый раз расказывать какие настройки и гдле менять )))
Здравствуйте! Прошу прощение за дурацкий вопрос, но я не знаю как с таким справиться. Когда работает макрос, и его работа связана с записью значений на другом листе (не активном), то происходит переход на другой лист, а потом обратно (потому что на активном тоже надо записывать значения). А так как макросом обрабатывается не малый массив, то таких переходов много - и это вызывает мерцание, и раздражение. Как от этого уйти?
Спасибо. Проблема решилась. Я просто пользовался макроридером, и для того, чтобы отобрязить все скрытые столбцы - выделял всю таблиц. А в 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
{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}
Имею балансы двух разных филлиалов. Создал Отдельный файл с итоговым балансом, куда подтягиваются данные из двух других файлов. В этом итоговом файле сделал возможность выбора (в ячейке А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", или наоборот; и ячейка становится АКТИВНОЙ. Чтобы в ней опять изменить значение приходится кликнуть по ней дважды, и здесь отработает второй код.
Я хочу уйти от второго кода... Вот и прошу помощи. Как реализовать эти изменения одним кликом в ячейке, если она уже АКТИВНА, а значенияе надо поменять. И также хочу использовать "пробел" для таких же действий в активной ячейке отслеживаемого диапазона.
"А неактивная - это какая?" Это та, в которой не находится курсор. :) ------- "На что менять-то значение в активной ячейке при нажатии на пробел?" Я ведь дал ссылку на тему, где в коде конкретно указано что на что меняется... :)
При одиночном щелчке проводит изменения только в неактивной ячейке. Если не прибегать к двойному щелчку, а все же использовать одиночный, то что надо дописать, чтобы проводились изменения и в активной ячейке. И также, хочу чтобы в активной ячейке менять значения нажатием клавиши "пробел".
{quote}{login=RAN}{date=14.04.2011 06:55}{thema=}{post}Cells(i,"A").Calculate не пробовали?{/post}{/quote} Спасибо! К сожалению - не пробовал. А работает :)