![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
Всем привет! Помогите плиз, ни как не пойму как организовать отклик:
В Excel на лист из внешней программы экспортируются данные и в нужной мне ячейке постоянно меняются значения. Задача создать временной ряд этих значений. Я пробовал так: идея такова когда происходит изменение на листе ячейке на другом листе присваивается значение ячейки на этом листе Private Sub Worksheet_Change(ByVal Target As Range) i Sheets("Memory").Cells(i, 1).Value = Range("L2").Value End Sub i - функция которая считает количество значений столбике куда копируются изменившееся значение и прибавляет 1. В итоге когда значение изменяю руками все работает, а когда данные экспортируются из внешней программы ничего не происходит. Я ни как не могу понять в справочнике написано что такое событие работает когда изменение происходит в результате изменения значений по ссылке. А по факту не работает. Помогите разобраться в чём причина или может есть какой нибудь другой способ получит временной ряд??? |
![]() |
![]() |
#2 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
Вот нашёл ещё пример всё про тоже но такой код у меня вообще не работает, может проблемма в другом, может настройки какие надо???
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim VRange As Range Set VRange = Range("L2") If Not Intersect(Target, VRange) Is Nothing Then Cells(Sheets("Memory").Range("A6553 6").End(xlUp).Row + 1, 1) = Range("L2") End If End Sub |
![]() |
![]() |
#3 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Попробуйте написать отдельный макрос, который будет выполнять все, что Вам нужно, и разместить его в отдельный модуль. А в модуле рабочего листа по событию изменения значения контролируемой ячейки запускать этот макрос (Run "Macro"). Должно сработать. Например, в модуль листа вставляем:
Код:
Код:
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
#4 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
Мне кажется я понял в чём может быть проблема, вернее вы читал.
Говорят: Событие Change наступает, когда содержимое ячейки меняется, а не редактируется, т.е. когда пользователь подтвердит (нажмет Enter) изменение. А до тех пор Change и не наступит. В моём случае изменяется буфер редактирования ячейки. Так вот я же хочу чтобы у меня из листа на котором происходит динамическое обновление ячейки, информация копировалась и накапливала историю(статистику) изменения на другом. Поэтому код для одного листа работает, т.к. появление новой записи в ячейки это Change, а если ячейка появляется с записью на другом листе то это Change для другого листа. Седня проверю, и напишу результат. |
![]() |
![]() |
#5 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
В итоге сделал так (ну я блин извращенец)
код в листе "2" Private Sub Worksheet_Change(ByVal Target As Range) i Sheets("Memory").Cells(i, 1).Value = Range("L2").Value End Sub i - функция которая считает количество значений столбике куда копируются изменившееся значение и прибавляет 1. код в листе "Memory" Private Sub Worksheet_Change(ByVal Target As Range) Dim PauseTime, Start, q q = Timer PauseTime = 3 Start = Timer Do While Timer < Start + PauseTime DoEvents Loop Sheets("2").Cells(i, 100) = Cells(i, 1) End Sub потребовалась также пауза для успевания пересчёта, да и так меньше данных накапливается т.к. не все нужны |
![]() |
![]() |
#6 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
ещё надо убрать из второго кода q, это лишнее осталось)
|
![]() |
![]() |
#7 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Это действительно извращение. Постоянный тормоз.
Воспользуйтесь лучше моим советом в посте № 3. Там при изменении значения ячейки "L2" (любым способом), запускается макрос, который копирует это значение в лист "Memory" в следующую непустую строку столбца "A".
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
#8 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
Да блин это изврат, плохо быть тупым, но новичкам я думаю без этого никуда. поэтому всё сделал на одном листе.И тормоза исчезли теперь всё работает как швецарские часы. Огромное спасибо форум очень полезный особенно его постоянные участники рассказали стоко примочек. Я теперь сдесь тоже буду постоянно т.к. прорект меня большой и одним днём не кончится , и хочется почему то другим помочь чем смогу.
|
![]() |
![]() |
#9 |
Регистрация: 02.06.2008
Сообщений: 9
|
![]()
спешал сэнкс и респект фо SAS888!!! Если будешь в Самаре пиши проставлюсь
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как лучше организовать базу данных типо как в ICQ | Руслантус | БД в Delphi | 3 | 09.08.2008 23:57 |
Событие | terminadoor | Общие вопросы Delphi | 13 | 17.07.2008 09:25 |
Не читаемые данные при Импорте внешних данных (unicode) | al2 | Microsoft Office Excel | 2 | 11.02.2008 08:40 |
Организовать ввод данных с файла созданного в первом задании и вывод их терминал. | Saniok | Помощь студентам | 2 | 25.10.2007 22:25 |