Что же для Excel есть изменение ячейки?
Посмотрел форум... в обсуждениях предлогались разные варианты. Самый казалось интересный, тот где на эту ячейку вешается ссылка к другой на другом листе и уже там вешается макрос на обновление. Но вот какая проблема... обнаружил, что Excel не считает изменением ячейки, изменение происходящее по связи если лист с оконечной ячейкой (на котором лежит макрос) не активен.:(
Единственный вариант который я пока придумал это создавать формулу в рабочем листе и вешать
Worksheet_Calculate. Можно ли Excel заставить понимать обновление по ссылке на неактивном листе?
Что-то не совсем понятно, как у тебя происходит обновление, почему тебе не достаточно Worksheet_Change
Ну для простоты... есть две ячейки и они обновляються по принципу: если обе то обе; если одна то одна, а вторая копируется.
Таким образом можно конечно и Worksheet_Change
но тогда надо заморачиваться с проверкой что именно изменилась нужная. Так что идея со связью на другой лист была интересна если бы не ...
А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.
А вопрос то был насамом деле про обновление по связи, что Эксел его не воспринимает как изменение и Worksheet_Change не включается.
Уважаемые, неужели ни у кого нет соображений на этот счёт? Вопрос то, давольно не тривиален...
Чего мы добиваемся связав несколько ячеек с одной на другом листе? причем если одна, то одна, если две то одна,....и непонятна роль макроса еще при этом, зачем ему запускаться, для корректировки чего и т.д..... вообщем у меня полная каша.
Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему
Воспользуйся событиями книги:
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
End Sub
Уважаемые, неужели ни у кого нет соображений на этот счёт? Вопрос то, давольно не тривиален...
Попробуй WorkSheet_Calculate + проверка значений нужных ячеек (если конечно их не слишком много):
В макросе WorkBook_Open считываем начальные значения ячеек.
Потом по WorkSheet_Calculate проверяем все ячейки на изменения...
...а дальше делай чего надо...
Все равно лично мне не очень понятны, все эти сложности с обновлением.
Чего мы добиваемся связав несколько ячеек с одной на другом листе? ..... вообщем у меня полная каша.
Хотелось бы увидеть простой пример воочию, и более предметно узнать о примере зависимостей, для чего и почему
День добрый Уважаемые!:)
Прошу прощения, но позволю себе повторится...
Вопрос был не про то как сделать макрос на обновление ячейки (понятно, что можно извратится
по всякому... с Change и/или Calculate).
Просто во время подобных извратов столкнулся с некой проблемой и хотелось понять, это я туплю или это принципиальная заморочка Excel-я.
Проблема же следующая: (если отвлечся от птичек..)
Есть Лист1 и Лист2.
Есть связь между А1 Листа1 и А1 Листа2.
Есть макрос Change на Листе2.
А, теперь ручками меняем значение в А1 на Листе1..
И как Вы все понимаете на Листе2 в ячейке А1 число то-же поменялось, НО макрос не
запустился :o
При дальнейшем копании выяснилось, что проблема судя по всему в том, что в момент изменения данных Лист2 не был активен. И Excel не считает такое изменение событием.
Теперь несколько слов на кой весь этот ...,
данный простой пример иметирует ситуацию когда для нужд проекта в моменты обновления данных из внешних источников (которые сбрасываются все в один лист, а потом распределяются связями между другими листами)необходимо иметь активными совсем другие листы. :-?
Воспользуйся событиями [COLOR=red]книги[/COLOR]:
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
End Sub
Проблема же следующая: (если отвлечся от птичек..)
Слава богу, а то не люблю я этих птичек :)
А по существу Cutty Sark как всегда прав, только через Workbook_SheetChange такие события отслеживаются, иожешь называть это фичей Excel.
Позволю повториться себе:
Воспользуйся событиями [COLOR=red]книги[/COLOR]:
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 хотя там данные поменялись то-же.
А данные часом не по DDE приходят?
День добрый!:}
Дак можно конечно и по DDE загонять...
Но как показывают предыдущие опыты :) это скорее всего не существенно.
День добрый!:}
Дак можно конечно и по DDE загонять...
Но как показывают предыдущие опыты :) это скорее всего не существенно.
Дело в том, что для ДДЕшных данных есть очень полезная штука: SetLinkOnData
Используется вот так:
ActiveWorkbook.SetLinkOnData "WinWord|'C:\MSGFILE.DOC'!DDE_LINK1", "my_Link_Update_Macro"
При обновлении "WinWord|'C:\MSGFILE.DOC'!DDE_LINK1" будет запущен макрос с именем my_Link_Update_Macro