Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Макрос на обновление связей в книгах - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос на обновление связей в книгах
ВикторЧерный Дата: Пятница, 25.01.2013, 12:46 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Господа, помогите оптимизировать макрос на обновление данных в файлах. Макрос написал сам, но ВБА знаю плохо , изучаю около двух недель. Макрос очень часто не проходит ( выдает Debug на сохранениях файлов, при повторном запуске макрос проходит нормально), поэтому нужна помощь в оптимизации макроса



Есть ли какая-нибудь комнда , обновляющая свзяи в книге ( чтобы не обязательно открывать 5 книг для обновления одной) и как можно уменьшить время прохождения макроса?


Сообщение отредактировал ВикторЧерный - Пятница, 25.01.2013, 13:00
 
Ответить
СообщениеГоспода, помогите оптимизировать макрос на обновление данных в файлах. Макрос написал сам, но ВБА знаю плохо , изучаю около двух недель. Макрос очень часто не проходит ( выдает Debug на сохранениях файлов, при повторном запуске макрос проходит нормально), поэтому нужна помощь в оптимизации макроса



Есть ли какая-нибудь комнда , обновляющая свзяи в книге ( чтобы не обязательно открывать 5 книг для обновления одной) и как можно уменьшить время прохождения макроса?

Автор - ВикторЧерный
Дата добавления - 25.01.2013 в 12:46
_Boroda_ Дата: Пятница, 25.01.2013, 13:39 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А так?

Private Sub Workbook_Open()  
ActiveWorkbook.RefreshAll
End Sub



Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так?
[vba]
Private Sub Workbook_Open()   ActiveWorkbook.RefreshAll End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 25.01.2013 в 13:39
jack_jackson Дата: Понедельник, 23.12.2013, 14:52 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
Добрый день!

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

Причем самих файлов-дней изначально нет на диске. Еесть только ссылки на них, в сводной месячной таблице. Эти фалы присылаются по эл. почте, потовая программа сама сохраняет их в определенную папку. Да, важно, что не все файлы-дни могут быть подряд. Некоторых может не быть вообще, скажем за выходной день.

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

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

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

Посоветуйте, пожалуйста, что можно сделать!


Сообщение отредактировал jack_jackson - Понедельник, 23.12.2013, 14:56
 
Ответить
СообщениеДобрый день!

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

Причем самих файлов-дней изначально нет на диске. Еесть только ссылки на них, в сводной месячной таблице. Эти фалы присылаются по эл. почте, потовая программа сама сохраняет их в определенную папку. Да, важно, что не все файлы-дни могут быть подряд. Некоторых может не быть вообще, скажем за выходной день.

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

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

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

Посоветуйте, пожалуйста, что можно сделать!

Автор - jack_jackson
Дата добавления - 23.12.2013 в 14:52
_Boroda_ Дата: Понедельник, 23.12.2013, 15:45 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Решение, которое предложил Boroda у меня не работает.

Конечно не работает. Вам нужно каждые 3 часа, а мой пред. код отрабатывает при открытии файла. Слова Workbook_Open Вас не насторожили?
Вам нужно что-то типа этого

Sub go_()
    Up_
End Sub
Sub Up_()
    Dim tn_
    ActiveWorkbook.RefreshAll
    tn_ = TimeSerial(Hour(Now) + 3, Minute(Now), Second(Now))
    Range("B2") = Range("B2") + 1
    Application.OnTime tn_, "Up_"
End Sub


Запускаем первый макрос, тот, который go_ называется
Для проверки можете строку tn_ = TimeSerial(Hour(Now) + 3, Minute(Now), Second(Now)) переписать так tn_ = TimeSerial(Hour(Now), Minute(Now), Second(Now) + 2) - будет обновляться каждые 2 секунды.
В ячейке В2 - счетчик обновлений. Можно переделать в другую ячейку или вообще стереть. Или написать Range("B2") = Now - тогда будет время последнего обновления (не забудьте поставить туда нужный формат ячейки)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Решение, которое предложил Boroda у меня не работает.

Конечно не работает. Вам нужно каждые 3 часа, а мой пред. код отрабатывает при открытии файла. Слова Workbook_Open Вас не насторожили?
Вам нужно что-то типа этого
[vba]
Sub go_()     Up_ End Sub Sub Up_()      Dim tn_      ActiveWorkbook.RefreshAll      tn_ = ТimeSerial(Hour(Now) + 3; Minute(Now); Second(Now))      Range("B2") = Range("B2") + 1      Application.OnTime tn_; "Up_" End Sub
[/vba]
Запускаем первый макрос, тот, который go_ называется
Для проверки можете строку tn_ = TimeSerial(Hour(Now) + 3, Minute(Now), Second(Now)) переписать так tn_ = TimeSerial(Hour(Now), Minute(Now), Second(Now) + 2) - будет обновляться каждые 2 секунды.
В ячейке В2 - счетчик обновлений. Можно переделать в другую ячейку или вообще стереть. Или написать Range("B2") = Now - тогда будет время последнего обновления (не забудьте поставить туда нужный формат ячейки)

Автор - _Boroda_
Дата добавления - 23.12.2013 в 15:45
jack_jackson Дата: Понедельник, 23.12.2013, 23:19 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
Конечно не работает. Вам нужно каждые 3 часа, а мой пред. код отрабатывает при открытии файла. Слова Workbook_Open Вас не насторожили?

Нет не насторожило, абсолютно :D Я же говорю:

В макросах я вообще не силен.

Поэтому и не обратил внимания. Но спасибо, что обратили моё внимание! Очень полезно.

Ваше решение с таймером, буду пробовать. Позже отпишусь об успехе.
Спасибо!


Сообщение отредактировал jack_jackson - Понедельник, 23.12.2013, 23:19
 
Ответить
Сообщение
Конечно не работает. Вам нужно каждые 3 часа, а мой пред. код отрабатывает при открытии файла. Слова Workbook_Open Вас не насторожили?

Нет не насторожило, абсолютно :D Я же говорю:

В макросах я вообще не силен.

Поэтому и не обратил внимания. Но спасибо, что обратили моё внимание! Очень полезно.

Ваше решение с таймером, буду пробовать. Позже отпишусь об успехе.
Спасибо!

Автор - jack_jackson
Дата добавления - 23.12.2013 в 23:19
jack_jackson Дата: Вторник, 24.12.2013, 00:44 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
Докладываю о результатах. Немного изменил код Boroda, чтобы макрос выполнялся раз в минуту (для тестов). И использовал отображение времени в ячейке S3.


Sub go_()
Up_
End Sub

Sub Up_()
Dim tn_
ActiveWorkbook.RefreshAll
tn_ = TimeSerial(Hour(Now), Minute(Now) + 1, Second(Now))
Range("S2") = Range("S2") + 1
Range("S3") = Now
Application.OnTime tn_, "Up_"
End Sub



Результат:
1. Макрос почему-то начинает автоматически выполняться при открытии книги. Хотя это вовсе и не проблема, но не понятно почему. Я понял так, что надо вручную запустить макрос go_.
2. Макрос выполняется совершенно не раз в минуту, а как-то не понятно. Вот хронометраж, состояние счетчика (B2) и последнего времени обновления (S3):

3. Связи при этом не обновлялись или пытались обновиться, но возникли ошибки. Пока работает макрос, добавляю новый файл. Через какое-то время захожу: Правка >> Связи >> Состояние, вижу что в колонке состояние напротив добавленного файла стоит ошибка "Предупреждение: значения не обновлены".

Что я не так делал? Подскажите.


Сообщение отредактировал jack_jackson - Вторник, 24.12.2013, 00:49
 
Ответить
СообщениеДокладываю о результатах. Немного изменил код Boroda, чтобы макрос выполнялся раз в минуту (для тестов). И использовал отображение времени в ячейке S3.
[vba]
Sub go_() Up_ End Sub Sub Up_() Dim tn_ ActiveWorkbook.RefreshAll tn_ = ТimeSerial(Hour(Now); Minute(Now) + 1; Second(Now)) Range("S2") = Range("S2") + 1 Range("S3") = Now Application.OnTime tn_; "Up_" End Sub
[/vba]

Результат:
1. Макрос почему-то начинает автоматически выполняться при открытии книги. Хотя это вовсе и не проблема, но не понятно почему. Я понял так, что надо вручную запустить макрос go_.
2. Макрос выполняется совершенно не раз в минуту, а как-то не понятно. Вот хронометраж, состояние счетчика (B2) и последнего времени обновления (S3):

3. Связи при этом не обновлялись или пытались обновиться, но возникли ошибки. Пока работает макрос, добавляю новый файл. Через какое-то время захожу: Правка >> Связи >> Состояние, вижу что в колонке состояние напротив добавленного файла стоит ошибка "Предупреждение: значения не обновлены".

Что я не так делал? Подскажите.

Автор - jack_jackson
Дата добавления - 24.12.2013 в 00:44
jack_jackson Дата: Среда, 08.01.2014, 19:25 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
В общем покопавшись по разным форумам, кажется я понял, почему макрос, предложенный Boroda, не работает. Есть две проблемы:

1. Когда происходит обновление внешних связей, командой ActiveWorkbook.RefreshAll, и какая-то ссылка не существует (как в моем случае, файлы приходят постепенно и не все по порядку), то обновление происходит ровно до момента ошибки. Исправляю эту проблему созданием пустых файлов, которые в последствии частично заменятся пришедшими по эл. почте.

2. Когда в книге связей много (например, как у меня больше 90). Требуется время чтобы ActiveWorkbook.RefreshAll обновил все связи. Но так как после него в макросе стоят другие команды или Excel типа сам продолжает работать (тут я не совсем понял причину) то команда ActiveWorkbook.RefreshAll не успевает обновить все связи. В общем Excel выполняет только часть обновлений, как-то надо дать ему время на обновление всего большого количества связей.

Уточняю.
По приблизительным замерам, с помощью секундомера, время обновления всех связей 1,5-2 сек.

Подскажите, уважаемые, как лечить вторую проблему?

Еще одно уточнение.
Сделал тупо следующий макрос, который обновляет каждую внешнюю связь отдельно. Работает, конечно. Но решение громоздкое и абсолютно не универсальное. Если со временем появились новые связи или месяц не январь, а другой и т.д.



Сообщение отредактировал jack_jackson - Среда, 08.01.2014, 22:24
 
Ответить
СообщениеВ общем покопавшись по разным форумам, кажется я понял, почему макрос, предложенный Boroda, не работает. Есть две проблемы:

1. Когда происходит обновление внешних связей, командой ActiveWorkbook.RefreshAll, и какая-то ссылка не существует (как в моем случае, файлы приходят постепенно и не все по порядку), то обновление происходит ровно до момента ошибки. Исправляю эту проблему созданием пустых файлов, которые в последствии частично заменятся пришедшими по эл. почте.

2. Когда в книге связей много (например, как у меня больше 90). Требуется время чтобы ActiveWorkbook.RefreshAll обновил все связи. Но так как после него в макросе стоят другие команды или Excel типа сам продолжает работать (тут я не совсем понял причину) то команда ActiveWorkbook.RefreshAll не успевает обновить все связи. В общем Excel выполняет только часть обновлений, как-то надо дать ему время на обновление всего большого количества связей.

Уточняю.
По приблизительным замерам, с помощью секундомера, время обновления всех связей 1,5-2 сек.

Подскажите, уважаемые, как лечить вторую проблему?

Еще одно уточнение.
Сделал тупо следующий макрос, который обновляет каждую внешнюю связь отдельно. Работает, конечно. Но решение громоздкое и абсолютно не универсальное. Если со временем появились новые связи или месяц не январь, а другой и т.д.


Автор - jack_jackson
Дата добавления - 08.01.2014 в 19:25
jack_jackson Дата: Среда, 29.01.2014, 22:59 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
Решил возобновить тему, рассказать о результатах, вдруг кому будет полезно.

Решить мою проблему с помощью команды ActiveWorkbook.RefreshAll у меня так и не вышло. Почему-то, не хотела она обновлять все связи, а разобраться сам я так и не смог. Пошел по другому пути. Оно основано не только на Excel, но может будет кому-то полезно, поэтому я счет уместным описать его тут. Приношу свои извинения фуромчанам, если это не совсем по теме.

Еще раз напомню в чем моя задача и проблема.
Задача постоянно и автоматически обновлять данные с сводной таблице. А проблема в следующем, данные в сводной таблице берутся из внешних таблиц (файлов). Которые постоянно приходят по эл. почте. Необходимо было, чтобы данные из вновь полученных файлов, попадали в сводную таблицу. Первоначально я хотел чтобы сводная таблица была все время открыта и периодически обновляла свои связи.

Решение:
1. Отключил в Excel запрос на обновление связей, так чтобы при открытии книги внешние связи обновлялись автоматически, без запроса.
2. Сделал следующий макрос, который сохраняет книгу

Sub Auto_Open()
    ActiveWorkbook.Save
End Sub


3. В почтовой программе TheBath создал правило:
- сохранять полученные файлы типа xls в определенную папку,
- запускать bat-файл, который открывает мою сводную таблицу
- закрывать Excel по истечении 60 секунд (этого мне хватает, чтобы все связи в книге обновились и она сохранилась)

Таким образом моя задача решилась, только с другого конца. Не Excel ждет новых данных, а почтовик запускает Excel чтобы обновились данные.
Еще раз приношу извинения всем специалистам по Excel, понимаю, что моё решение не совсем по теме форума.


Сообщение отредактировал jack_jackson - Среда, 29.01.2014, 23:05
 
Ответить
СообщениеРешил возобновить тему, рассказать о результатах, вдруг кому будет полезно.

Решить мою проблему с помощью команды ActiveWorkbook.RefreshAll у меня так и не вышло. Почему-то, не хотела она обновлять все связи, а разобраться сам я так и не смог. Пошел по другому пути. Оно основано не только на Excel, но может будет кому-то полезно, поэтому я счет уместным описать его тут. Приношу свои извинения фуромчанам, если это не совсем по теме.

Еще раз напомню в чем моя задача и проблема.
Задача постоянно и автоматически обновлять данные с сводной таблице. А проблема в следующем, данные в сводной таблице берутся из внешних таблиц (файлов). Которые постоянно приходят по эл. почте. Необходимо было, чтобы данные из вновь полученных файлов, попадали в сводную таблицу. Первоначально я хотел чтобы сводная таблица была все время открыта и периодически обновляла свои связи.

Решение:
1. Отключил в Excel запрос на обновление связей, так чтобы при открытии книги внешние связи обновлялись автоматически, без запроса.
2. Сделал следующий макрос, который сохраняет книгу
[vba]
Sub Auto_Open()        ActiveWorkbook.Save End Sub
[/vba]
3. В почтовой программе TheBath создал правило:
- сохранять полученные файлы типа xls в определенную папку,
- запускать bat-файл, который открывает мою сводную таблицу
- закрывать Excel по истечении 60 секунд (этого мне хватает, чтобы все связи в книге обновились и она сохранилась)

Таким образом моя задача решилась, только с другого конца. Не Excel ждет новых данных, а почтовик запускает Excel чтобы обновились данные.
Еще раз приношу извинения всем специалистам по Excel, понимаю, что моё решение не совсем по теме форума.

Автор - jack_jackson
Дата добавления - 29.01.2014 в 22:59
AndreTM Дата: Четверг, 30.01.2014, 01:26 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Ещё реальнее - сделать так, чтобы обновление запускалось именно и только по событию поступления новой информации. То есть сама почтовая программа, после подтвержденного приёма, - инициирует обновение свода. Если в это время поступают новые сообщения - они накапливаются, а затем снова инициируется обновление - ибо поступили новые сообщения. И никаких циклов ожидания и надежд на скорость обновления данных приложением - привыкайте управлять полной моделью данных, включающей не только методы, но и события... :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеЕщё реальнее - сделать так, чтобы обновление запускалось именно и только по событию поступления новой информации. То есть сама почтовая программа, после подтвержденного приёма, - инициирует обновение свода. Если в это время поступают новые сообщения - они накапливаются, а затем снова инициируется обновление - ибо поступили новые сообщения. И никаких циклов ожидания и надежд на скорость обновления данных приложением - привыкайте управлять полной моделью данных, включающей не только методы, но и события... :)

Автор - AndreTM
Дата добавления - 30.01.2014 в 01:26
jack_jackson Дата: Пятница, 07.02.2014, 18:13 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 33
Репутация: 0 ±
Замечаний: 20% ±

Excel 2003
Ещё реальнее - сделать так, чтобы обновление запускалось именно и только по событию поступления новой информации. То есть сама почтовая программа, после подтвержденного приёма, - инициирует обновение свода.


Я так и сделал :D
Если кому надо, пишите, помогу и bat-файл скину


Сообщение отредактировал jack_jackson - Пятница, 07.02.2014, 18:13
 
Ответить
Сообщение
Ещё реальнее - сделать так, чтобы обновление запускалось именно и только по событию поступления новой информации. То есть сама почтовая программа, после подтвержденного приёма, - инициирует обновение свода.


Я так и сделал :D
Если кому надо, пишите, помогу и bat-файл скину

Автор - jack_jackson
Дата добавления - 07.02.2014 в 18:13
lebensvoll Дата: Четверг, 19.07.2018, 18:27 | Сообщение № 11
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
_Boroda_,
Александр, а также форумчане!!!
Прошу Вас помочь поправить мой код, по аналогичной теме (дабы не создавать новую).
ЗАДАЧА: а если лист книги запоролены
правильно я тогда понял что нужно сделать так вот:

Private Sub Workbook_Open()
'отключаем обновление экрана
Application.ScreenUpdating = False

    Dim sh As Worksheet
    'снимаем защиту
    For Each sh In Worksheets
    sh.Unprotect "09052002" 'цифры - это пароль
    Next sh
    
    'обновляем запись
    For Each sh In ThisWorkbook.Sheets
    ActiveWorkbook.RefreshAll
    
    Next sh
    'устонавливаем защиту
    For Each sh In Worksheets
    sh.Protect password:="09052002", DrawingObjects:=True, Contents:=True, Scenarios:=True
    Next sh
    
'Возвращаем обновление экрана
Application.ScreenUpdating = True

MsgBox "Записи обновлены"

End Sub


Но что то вроде бы не то ((( особено смущает меня именно вот это
Цитата
'обновляем запись
For Each sh In ThisWorkbook.Sheets
ActiveWorkbook.RefreshAll

Хотя при проверке ошибок не выявляет, но и при открывании файла связи не обновляются. А вот если я сам сниму пароль и обновлю то все олрайд!!!!


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_,
Александр, а также форумчане!!!
Прошу Вас помочь поправить мой код, по аналогичной теме (дабы не создавать новую).
ЗАДАЧА: а если лист книги запоролены
правильно я тогда понял что нужно сделать так вот:
[vba]
Private Sub Workbook_Open()'отключаем обновление экранаApplication.ScreenUpdating = False    Dim sh As Worksheet    'снимаем защиту    For Each sh In Worksheets    sh.Unprotect "09052002" 'цифры - это пароль    Next sh        'обновляем запись    For Each sh In ThisWorkbook.Sheets    ActiveWorkbook.RefreshAll        Next sh    'устонавливаем защиту    For Each sh In Worksheets    sh.Protect password:="09052002"; DrawingObjects:=Тrue; Contents:=Тrue; Scenarios:=Тrue    Next sh    'Возвращаем обновление экранаApplication.ScreenUpdating = Тrue   MsgBox "Записи обновлены"End Sub
[/vba]
Но что то вроде бы не то ((( особено смущает меня именно вот это
Цитата
'обновляем запись
For Each sh In ThisWorkbook.Sheets
ActiveWorkbook.RefreshAll

Хотя при проверке ошибок не выявляет, но и при открывании файла связи не обновляются. А вот если я сам сниму пароль и обновлю то все олрайд!!!!

Автор - lebensvoll
Дата добавления - 19.07.2018 в 18:27
lebensvoll Дата: Четверг, 19.07.2018, 18:49 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
А не все вопрос закрыт.
Связи обновились. Как только выключил запрос на обновление связей и установил галочку "НЕ задавать вопрос и обновлять связи".
Вроде все ГУД...
Спасибо всем....


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеА не все вопрос закрыт.
Связи обновились. Как только выключил запрос на обновление связей и установил галочку "НЕ задавать вопрос и обновлять связи".
Вроде все ГУД...
Спасибо всем....

Автор - lebensvoll
Дата добавления - 19.07.2018 в 18:49
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!