Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > обновление связей только в выделенных ячейках


Автор: sergei3000 1.3.2006, 09:23
никак не могу понять, возможно ли (а если возможно, то как) в exel сделать макрос, который обновлял бы внешние связи (с другими файлами excel через формулы) только в выделенных ячейках. ведь через стандартные опции программы можно обновить или все связи, или с отдельными файлами. а что делать, если мне нужно обновить связи не совсем файлом, на который есть ссылки в моём документе, а только те, что находятся в определённых ячейках? у меня есть масса тяжёлых и взаимосвязанных файлов, для работы с которыми мне это просто необходимо.
например, чтобы вычислить только выделенные ячейки, достаточно простого selection.calculate. есть методы update и refresh, но при попытке их использования выдаётся сообщение о том, что с этим объектом (selection) они не работают.

Автор: Akina 1.3.2006, 10:07
Пороть! Розгами! Бездельник!

Что, трудно набрать "обновление связей" в строке поиска по встроенной справке Экселя???

Автор: sergei3000 2.3.2006, 08:12
очень смешно. а толку? незачот, короче.

стал бы я сюда обращаться, если бы справку сначала не перерыл???

Автор: Akina 2.3.2006, 09:36
Да он еще и слепой... ну на..

Цитата(MS Excel Help @ раздел "Управление обновлением связей")

Частичное обновление связей с другими книгами

Закройте все книги.
Откройте книгу, содержащую связи.
Когда появится запрос на обновление связей, нажмите Не обновлять.
В меню Правка выберите команду Связи.
Из списка Источник выберите связанный объект, который необходимо изменить.
Для выделения нескольких связанных объектов, не отпуская клавишу CTRL, выберите каждый связанный объект.

Чтобы выделить все связанные объекты, нажмите CTRL+A.

Нажмите Обновить значения.


Предвосхищая следующий вопрос:

Сервис-Макрос-Запись

Автор: Twwi 2.3.2006, 11:31
Akina, Вы не поняли, нужно из одного источника не все формулы обновить.
К сожалению, чтобы сделать напрямую ничего мне не удалось найти.

Можно поизголяться..
В книге, в стороне от рабочей области создать два вспомогательных столбца. Первыйь - текущие значения формул (ну или предыдущее обновление), второй - формулы-линки на другие источники. Формулы в рабочей области будут ссылаться на первый столбец.
Далее, на открытие книги написать макрос, который будет переписывать текущие значения в первый столбец. ДАлее обновиться - обновиться второй столбец - рабочая область все еще будет ссылаться на значения до обновления.
Теперь написать макрос который по выделенным ячейкам определит от каких значений из первого столбца они зависят и переписать эти значения (в 1-м столбце) значениями из второго.

Но это называется изголяться. Скорее всего надо подумать над изменением структуры книг. Или может еще кто-нибуть что-нибудь подскажет..

Автор: Akina 2.3.2006, 11:49
Цитата(Twwi @ 2.3.2006, 12:31 Найти цитируемый пост)
Вы не поняли

Я все прекрасно понял.

первый шаг - надо научиться обновлять только выбранные связи. это описано цитатой из хелпа.
второй шаг - надо научиться делать это программно. это делается записью макроса выборочного обновления и последующим изучением полученного кода.

Остается сделать макрос под свои данные и запихать его в XLStart или навесить на кнопку.

Автор: sergei3000 3.3.2006, 06:54
Цитата(Akina @ 2.3.2006, 11:49 Найти цитируемый пост)
Цитата(Twwi @ 2.3.2006, 12:31 )
Вы не поняли


Я все прекрасно понял.


в том-то и дело, что не понял. так что слепой здесь не я. если не понятно из моего первого поста, объясняю на примере (упрощенном, естессно). есть ячейки A1, A2, А3, В1, В2, В3. А1, А2, А3 ссылаются на ячейки в файле "книга1.xls"; ячейки В1, В2, В3 ссылаются на ячейки в файле "книга2.xls". мне нужно обновить только ячейки А1 и А2. ячейку А3 обновлять не нужно. если я сделаю это по цитируемой вами справке, обновятся все связи с файлом "книга1.xls", в том числе и А3, а это совсем не то, что нужно.


Цитата(Twwi @ 2.3.2006, 11:31 Найти цитируемый пост)
Но это называется изголяться.

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

Автор: Akina 3.3.2006, 10:13
Цитата(sergei3000 @ 3.3.2006, 07:54 Найти цитируемый пост)
если я сделаю это по цитируемой вами справке, обновятся все связи с файлом "книга1.xls", в том числе и А3

Тьфу. Действительно, слепой...

Тогда может попробовать что-нить типа

Код

ForEach Cell in Selection.Range.Cells()
   Cell.Update
next


?

Автор: Twwi 3.3.2006, 10:14
Цитата

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

можно еще помучиться и определить залинкованые ячейки по формулам (ADDRESS), тогда на них не будет влиять сдвиг ряда, ячейки.. Но если часто требуется добавление новый ячеек, придется взять карандаш с листочком и подумать у кого откуда ноги растут smile Удачи!

p.s. Cell.Update такого свойства к сожалению нет smile

Автор: sergei3000 3.3.2006, 12:05
Цитата(Akina @ 3.3.2006, 10:13 Найти цитируемый пост)
Тогда может попробовать что-нить типа


код Visual Basic


не получается.
пишет "Wrong number of arguments or invalid property assignment". дебаггер при этом высвечивает первую строчку кода.

а с объектами Cells и Selection метод Update, кажется, не работает

2 Twii
Цитата(Twwi @ 3.3.2006, 10:14 Найти цитируемый пост)
Присоединённый файл ( Кол-во скачиваний: 0 )
  Book1.rar 1,46 Kb

что там? почему-то не скачивается, на странице надпись о том, что для гостей это недоступно, хотя я до этого залогинился

Автор: Akina 3.3.2006, 13:33
sergei3000, в качестве бреда - попробуй с ячейки в selection сперва считать формулу, а потом переприсвоить... просто не помню - при ссылке на другую книгу выполняется ли немедленный пересчет...

Автор: Twwi 3.3.2006, 16:14
Прикрепляю доделанный файл, там готовый макрос, который на селекшен обновляет предыдущие записи обновленными.
На блюдечке с голубой каемочкой smile

добавлено - колонка с формулами ADDRESS вообще не нужна. прошу прощения, температура 38 smile

Автор: sergei3000 4.3.2006, 16:55
2 Twii

спасибо
не удаёца скачать файл отсюда. если можешь, отправь, плиз, на [email protected].
спасибо ещё раз

Автор: sergei3000 6.3.2006, 07:37
а ларчик просто открывался!


Цитата(Akina @ 3.3.2006, 13:33 Найти цитируемый пост)
попробуй с ячейки в selection сперва считать формулу, а потом переприсвоить


спасибо за идею!

оказывается, достаточно всего лишь

Код

Sub updSel()
    Dim r As Range
    For Each r In Selection
        r.Formula = r.Formula
    Next r
End Sub


2 Twwi
тоже большое спасибо за участие!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)