Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что же для Excel есть изменение ячейки?

3.4K
20 октября 2003 года
BAGA
25 / / 20.10.2003
Столкнулся с необходимостью написания макроса запускающегося по обновлению конкретной ячейки на листе, где обновляются несколько ячеек.
Посмотрел форум... в обсуждениях предлогались разные варианты. Самый казалось интересный, тот где на эту ячейку вешается ссылка к другой на другом листе и уже там вешается макрос на обновление. Но вот какая проблема... обнаружил, что Excel не считает изменением ячейки, изменение происходящее по связи если лист с оконечной ячейкой (на котором лежит макрос) не активен.:(
Единственный вариант который я пока придумал это создавать формулу в рабочем листе и вешать
Worksheet_Calculate. Можно ли Excel заставить понимать обновление по ссылке на неактивном листе?
258
20 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Что-то не совсем понятно, как у тебя происходит обновление, почему тебе не достаточно Worksheet_Change
3.4K
20 октября 2003 года
BAGA
25 / / 20.10.2003
Цитата:
Originally posted by SergeySV
Что-то не совсем понятно, как у тебя происходит обновление, почему тебе не достаточно Worksheet_Change



Ну для простоты... есть две ячейки и они обновляються по принципу: если обе то обе; если одна то одна, а вторая копируется.
Таким образом можно конечно и Worksheet_Change
но тогда надо заморачиваться с проверкой что именно изменилась нужная. Так что идея со связью на другой лист была интересна если бы не ...
А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.

3.4K
22 октября 2003 года
BAGA
25 / / 20.10.2003
Цитата:
Originally posted by BAGA

А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.


Уважаемые, неужели ни у кого нет соображений на этот счёт? Вопрос то, давольно не тривиален...

258
22 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Все равно лично мне не очень понятны, все эти сложности с обновлением.

Чего мы добиваемся связав несколько ячеек с одной на другом листе? причем если одна, то одна, если две то одна,....и непонятна роль макроса еще при этом, зачем ему запускаться, для корректировки чего и т.д..... вообщем у меня полная каша.

Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему
267
22 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Что-то эта тема раньше прошла мимо меня. :)

Воспользуйся событиями книги:
 
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)

End Sub
478
22 октября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by BAGA

Уважаемые, неужели ни у кого нет соображений на этот счёт? Вопрос то, давольно не тривиален...



Попробуй WorkSheet_Calculate + проверка значений нужных ячеек (если конечно их не слишком много):
В макросе WorkBook_Open считываем начальные значения ячеек.
Потом по WorkSheet_Calculate проверяем все ячейки на изменения...
...а дальше делай чего надо...

3.4K
23 октября 2003 года
BAGA
25 / / 20.10.2003
Цитата:
Originally posted by SergeySV
Все равно лично мне не очень понятны, все эти сложности с обновлением.

Чего мы добиваемся связав несколько ячеек с одной на другом листе? ..... вообщем у меня полная каша.

Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему



День добрый Уважаемые!:)
Прошу прощения, но позволю себе повторится...
Вопрос был не про то как сделать макрос на обновление ячейки (понятно, что можно извратится
по всякому... с Change и/или Calculate).
Просто во время подобных извратов столкнулся с некой проблемой и хотелось понять, это я туплю или это принципиальная заморочка Excel-я.

Проблема же следующая: (если отвлечся от птичек..)
Есть Лист1 и Лист2.
Есть связь между А1 Листа1 и А1 Листа2.
Есть макрос Change на Листе2.
А, теперь ручками меняем значение в А1 на Листе1..
И как Вы все понимаете на Листе2 в ячейке А1 число то-же поменялось, НО макрос не
запустился :o
При дальнейшем копании выяснилось, что проблема судя по всему в том, что в момент изменения данных Лист2 не был активен. И Excel не считает такое изменение событием.
Теперь несколько слов на кой весь этот ...,
данный простой пример иметирует ситуацию когда для нужд проекта в моменты обновления данных из внешних источников (которые сбрасываются все в один лист, а потом распределяются связями между другими листами)необходимо иметь активными совсем другие листы. :-?

267
23 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Позволю повториться себе:

Воспользуйся событиями [COLOR=red]книги[/COLOR]:

 
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)

End Sub

258
23 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by BAGA

Проблема же следующая: (если отвлечся от птичек..)


Слава богу, а то не люблю я этих птичек :)

А по существу Cutty Sark как всегда прав, только через Workbook_SheetChange такие события отслеживаются, иожешь называть это фичей Excel.

3.4K
23 октября 2003 года
BAGA
25 / / 20.10.2003
Цитата:
Originally posted by Cutty Sark
Позволю повториться себе:

Воспользуйся событиями [COLOR=red]книги[/COLOR]:

 
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)

End Sub



Уважаемые!
Создаём ситуацию описаную ранее (Лист1, Лист2 и т.д). На Лист2 вешаем макрос:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
N = Sh.Name
R = Target.Address
End Sub

И отслеживаем в Debug-е значение переменной N и R.
Дак вот если на Листе1 изменяется ячейка А1, а на Листе2 связь в В1, то в Debug-е мы увидим, что N=Лист1, а R="А1".
Т.е Excel считает что изменилась А1 на Листе1, а вовсе не В1 на Листе2 хотя там данные поменялись то-же.

3.4K
23 октября 2003 года
BAGA
25 / / 20.10.2003
Опечатка макрос конечно же вешаем на всю книгу:)
267
23 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
А данные часом не по DDE приходят?
3.4K
24 октября 2003 года
BAGA
25 / / 20.10.2003
Цитата:
Originally posted by Cutty Sark
А данные часом не по DDE приходят?



День добрый!:}
Дак можно конечно и по DDE загонять...
Но как показывают предыдущие опыты :) это скорее всего не существенно.

267
24 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by BAGA


День добрый!:}
Дак можно конечно и по DDE загонять...
Но как показывают предыдущие опыты :) это скорее всего не существенно.



Дело в том, что для ДДЕшных данных есть очень полезная штука: SetLinkOnData

Используется вот так:
ActiveWorkbook.SetLinkOnData "WinWord|'C:\MSGFILE.DOC'!DDE_LINK1", "my_Link_Update_Macro"

При обновлении "WinWord|'C:\MSGFILE.DOC'!DDE_LINK1" будет запущен макрос с именем my_Link_Update_Macro

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог