Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 21:17   #1
Artmi
 
Регистрация: 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.

В итоге когда значение изменяю руками все работает, а когда данные экспортируются из внешней программы ничего не происходит.
Я ни как не могу понять в справочнике написано что такое событие работает когда изменение происходит в результате изменения значений по ссылке. А по факту не работает. Помогите разобраться в чём причина или может есть какой нибудь другой способ получит временной ряд???
Artmi вне форума
Старый 03.06.2008, 00:03   #2
Artmi
 
Регистрация: 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
Artmi вне форума
Старый 03.06.2008, 05:03   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Попробуйте написать отдельный макрос, который будет выполнять все, что Вам нужно, и разместить его в отдельный модуль. А в модуле рабочего листа по событию изменения значения контролируемой ячейки запускать этот макрос (Run "Macro"). Должно сработать. Например, в модуль листа вставляем:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = Range("L2").Address Then Run "Macro1"   
End Sub
А в отдельный модуль вставляем:
Код:
Sub Macro1()
    With Sheets("Memory")
        .Cells(.Range("A65536").End(xlUp).Row + 1, 1) = Range("L2")
    End With
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 03.06.2008, 10:02   #4
Artmi
 
Регистрация: 02.06.2008
Сообщений: 9
По умолчанию

Мне кажется я понял в чём может быть проблема, вернее вы читал.
Говорят: Событие Change наступает, когда содержимое ячейки меняется, а не редактируется, т.е. когда пользователь подтвердит (нажмет Enter) изменение. А до тех пор Change и не наступит. В моём случае изменяется буфер редактирования ячейки.
Так вот я же хочу чтобы у меня из листа на котором происходит динамическое обновление ячейки, информация копировалась и накапливала историю(статистику) изменения на другом. Поэтому код для одного листа работает, т.к. появление новой записи в ячейки это Change, а если ячейка появляется с записью на другом листе то это Change для другого листа. Седня проверю, и напишу результат.
Artmi вне форума
Старый 03.06.2008, 11:10   #5
Artmi
 
Регистрация: 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
потребовалась также пауза для успевания пересчёта, да и так меньше данных накапливается т.к. не все нужны
Artmi вне форума
Старый 03.06.2008, 11:12   #6
Artmi
 
Регистрация: 02.06.2008
Сообщений: 9
По умолчанию

ещё надо убрать из второго кода q, это лишнее осталось)
Artmi вне форума
Старый 03.06.2008, 13:15   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Это действительно извращение. Постоянный тормоз.
Воспользуйтесь лучше моим советом в посте № 3. Там при изменении значения ячейки "L2" (любым способом), запускается макрос, который копирует это значение в лист "Memory" в следующую непустую строку столбца "A".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 03.06.2008, 23:17   #8
Artmi
 
Регистрация: 02.06.2008
Сообщений: 9
По умолчанию

Да блин это изврат, плохо быть тупым, но новичкам я думаю без этого никуда. поэтому всё сделал на одном листе.И тормоза исчезли теперь всё работает как швецарские часы. Огромное спасибо форум очень полезный особенно его постоянные участники рассказали стоко примочек. Я теперь сдесь тоже буду постоянно т.к. прорект меня большой и одним днём не кончится , и хочется почему то другим помочь чем смогу.
Artmi вне форума
Старый 03.06.2008, 23:31   #9
Artmi
 
Регистрация: 02.06.2008
Сообщений: 9
По умолчанию

спешал сэнкс и респект фо SAS888!!! Если будешь в Самаре пиши проставлюсь
Artmi вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше организовать базу данных типо как в 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