Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как определить адрес измененной ячейки excel vba
 
есть чистый лист ексель,туда через ddе передаються данные ,мне надо узнать номер строки и номер столбца последней изменившейся ячейки,например в столбце были числа    
10  
20  
30  
100  
число 20поменялось на 0 нужно вывести Msgbox сномером строки и номером столбца, в данном примере изменилась ячейка встроке 2 столбце 1
 
воспользоваться поиском по форуму.    
слово для поиска (вы не поверите!!!) можно указать "DDE"
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
спасибо
 
Я бы попробовал взять при загрузке файла изменяющийся диапазон в публичный массив (всю возможную область, или на одну(десять) ячейку ниже существующих данных, если возможно добавление ниже.  
Далее по пересчёту (завязать на диапазон формулу) срабатывает макрос, который берёт этот же диапазон в другой массив и их сравнивает, определяет изменившуюся ячейку, затем запоминаем новый массив.
 
А каким оператором задавать изменяющийся диапазон?
 
"изменяющийся" - в данном случае имеется в виду тот диапазон, в котором у Вас появляются/меняются данные через DDE.  
например: ячейки A1:A4  
тогда:    
при старте - запомнить в массив arr=[a1:a4].value
при очередном изменении - сравнивать текущие значения в [a1:a4] с массивом.
 
westsur, скажите честно - насколько Вы знаете VBA?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А при DDE  Target не срабатывает?
 
неа, Calculate нужен
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Знаю только азы vba(типы переменных ,for-next,if-then,вызов процедуры call)  
А как с помощью Calculate реагировать на пересчет не на всем листе,а в ячейке или в заданном диапазоне ячеек?
 
Пост Hugo от 08.03.2012, 18:57.
Я сам - дурнее всякого примера! ...
 
Спасибо.  
Мне сам синтаксис calculate нужен  например хочу чтобы calculate срабатывал только на пересчет  в ячейке А1 что писать после calculate?  
sub worksheet_calculate(лист1).cells(1,1) -что то в этом роде существует,процедура типа calculate только в которой я могу указать ячейку или диапазон на который она реагирует
 
Пересчёт только А1 не получится отследить, будет срабатывать на любой пересчёт, но это другой вопрос.  
Попробуйте:  
 
1. в стандартный модуль  
Public a()  
 
2. в модуль книги (массив а нужно заполнить)  
Private Sub Workbook_Open()  
a = Sheets(1).[a1:a10].Value
End Sub  
 
3. в модуль листа  
Private Sub Worksheet_Calculate()  
Dim b(), i&  
b = [a1:a10].Value
For i = 1 To UBound(b)  
If a(i, 1) <> b(i, 1) Then MsgBox Cells(i, 1).Value  
Next  
a = b  
End Sub  
 
Ну и на листе в любой ячейке =SUM(A1:A10), т.е. отслеживаем диапазон A1:A10  
И кстати реагирует не только на числа.
 
Спасибо,попробую,а что обозначает i& в строке  Dim b(), i&  
 
при изменении массива а1а10 выдает ошибку run-time error"9":subscript out of range
 
& означает тип Long. В данном случае хватило бы и Byte, но пусть будет универсально :)  
 
А если ошибка - значит что-то сделали не так, как я написал.  
См. файл.
 
Спасибо,работает и мой и ваш,щас загрузил свой файл который не работал он сам заработал))
 
осталось сделать чтобы он номер строки изменившейся выдавал,а не само новое значение
 
вместо Then MsgBox Cells(i, 1).Value поставил Then MsgBox i поставил теперь номер изменившейся строки пишет ,все ок,большое спасибо за помощь
 
Ну и хорошо.  
А Ваш файл выдавал ошибку потому, что не был сформирован массив a - это моя ошибка, я не сказал, что файл нужно закрыть и открыть, чтоб сработал  Sub Workbook_Open()  
Ещё можно выводить MsgBox Cells(i, 1).address, если нужен именно адрес.
 
Спасибо большое
Страницы: 1
Читают тему (гостей: 1)
Наверх