Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 10:59   #1
Максим Ростовский
 
Регистрация: 11.06.2010
Сообщений: 4
Вопрос Обновление связей

Ситуация следующая. Есть исходная книга Excel, куда каждые день по нескольку раз на день выгружаются данные из программы методом копи/паста. На эту книгу настроены связи нескольких других книг (около 10).
Вопрос, как сделать так, чтобы при обновлении исходной книги автоматически (!!!) обновлялись данные по связям в конечных книгах? Возможно ли это сделать из командной строки? Сейчас приходится каждый раз открывать, нажимать кнопку "обновить", сохранять и закрывать. Связей много, таблицы большие и 10 файлов - занимает прилично времени. Да еще и каждый день!
Максим Ростовский вне форума Ответить с цитированием
Старый 11.06.2010, 18:48   #2
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

В идеале необходимо было сделать связи из исходного файла с 10-ю остальными файлами, обновлялось бы всё легко нажатием кнопки (при закрытых 10-и файлах).

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

На элементарном уровне его можете сделать и Вы сами, включите во всех 10 файлах автоматическое обновление, сохраните, закройте, далее откройте исходный файл, Сервис - Макросы - Запись и выполняйте Ваши стандартные действия по "обновлению" каждого из десяти файлов. После обновления последнего файла, закройте его и в исходном файле Сервис - Макросы - Остановить запись.

Запуск макроса повторит все Ваши действия.
EugeneS вне форума Ответить с цитированием
Старый 16.06.2010, 15:23   #3
Максим Ростовский
 
Регистрация: 11.06.2010
Сообщений: 4
По умолчанию

Спасибо за информацию, но второй способ не подошел. Макрос закрывает просто активное окно и все. Не могли бы Вы подробнее описать первый? Какую кнопку нажимать и где?
Максим Ростовский вне форума Ответить с цитированием
Старый 16.06.2010, 23:38   #4
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

можно сделать, например, так, см. вложение

Файлы "со связями" для удобства должны находиться в одной папке, которую необходимо указать. Макрос откроет и обновит все файлы Эксель в данной папке (кроме файлов во вложенных папках).

Откройте файл запустите макрос "UpdateLinks"
Вложения
Тип файла: zip Книга1.zip (5.9 Кб, 120 просмотров)
EugeneS вне форума Ответить с цитированием
Старый 17.06.2010, 09:08   #5
Максим Ростовский
 
Регистрация: 11.06.2010
Сообщений: 4
По умолчанию

Не работает. Не обновляет он файл автоматически. Запускаю макрос, выбираю папку. Если файл остается в папке, то обновляется (это само собой, так как макрос снимает галочку с опции "Запрашивать об обновлении автоматических связей"). Если я файл куда-то копирую после запуска макроса, то значения остаются предыдущими.
А возможно ли при помощи batch-файла процедуру проделать? Открыть, сохранить, закрыть файл?
Максим Ростовский вне форума Ответить с цитированием
Старый 17.06.2010, 15:58   #6
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

попробуйте вот такой вариант:

Код:
Option Explicit
Sub UpdateLinks()
Dim i As Integer, folderpath As String, x As Variant, iname As String, w As Integer
With Application.FileDialog(msoFileDialogFolderPicker): .AllowMultiSelect = False
If .Show = -1 Then
    folderpath = .SelectedItems(1)
Else
Exit Sub
End If: End With
With Application: .Visible = False: .ScreenUpdating = False: End With
With Application.FileSearch: .LookIn = folderpath: .Filename = "*.xls"
If .Execute > 0 Then
    For i = 1 To .FoundFiles.Count
       Application.AskToUpdateLinks = False: Workbooks.Open (.FoundFiles(i))
       With ActiveWorkbook: iname = Mid(.Name, 1, InStr(.Name, ".") - 1)
       x = .LinkSources(xlExcelLinks)
        For w = 1 To UBound(x)
            .BreakLink Name:=x(w), Type:=xlLinkTypeExcelLinks
        Next
       .SaveCopyAs Filename:=folderpath & "\Готово\" & iname & "_Updated.xls": .Close False: End With
    Next i
Else
MsgBox "Файлы с таким расширением не найдены"
End If: With Application: .Visible = True: .ScreenUpdating = True: End With
End With: End Sub
Файлы со связями находятся в одной папке которую необходимо указать в ходе выполнения макроса. Также в этой папке создайте папку "Готово" в которую будут сохранены файлы с обновленными данными, но с разорванными связями. В конце каждого такого файла будет добавлено: "_Updated"

Последний раз редактировалось EugeneS; 17.06.2010 в 17:00.
EugeneS вне форума Ответить с цитированием
Старый 25.06.2010, 13:54   #7
Максим Ростовский
 
Регистрация: 11.06.2010
Сообщений: 4
По умолчанию

Попробовал. В тестовом режиме получилось, на "промышленных" файлах еще не прогонял. Спасибо!
Вы так уклончиво уходили от ответа о батниках, но я все равно снова задам этот вопрос Как сделать так, чтобы этот файлик с макросом запускался и выполнялся в автоматическом режиме? Просто сейчас очень удобно вписал в батник действия с этими файлами - переименование, архивирование, распихивание по папкам этих файлов и отсылка их по почте. И очень хочется в начале этого батника прописать обновление файлов. Есть идеи?
Максим Ростовский вне форума Ответить с цитированием
Старый 26.06.2010, 14:45   #8
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

Цитата:
Сообщение от Максим Ростовский Посмотреть сообщение
...Вы так уклончиво уходили от ответа о батниках, но я все равно снова задам этот вопрос Как сделать так, чтобы этот файлик с макросом запускался и выполнялся в автоматическом режиме? Просто сейчас очень удобно вписал в батник действия с этими файлами - переименование, архивирование, распихивание по папкам этих файлов и отсылка их по почте. И очень хочется в начале этого батника прописать обновление файлов. Есть идеи?
я не уходил от этого вопроса, создание бат-файла выходит за рамки данного раздела форума, поищите в Интернет или на форумах в соответствующих разделах
EugeneS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД со всеми видами связей Катёна Microsoft Office Access 0 23.04.2010 00:52
Обновление связей между 2-мя и более книгами Quatro_Drive Microsoft Office Excel 5 30.12.2009 07:55
Диагностика проблем связей stas77 Microsoft Office Excel 1 19.11.2009 08:59
Обновление внешних связей Григорьев Игорь Microsoft Office Excel 12 10.11.2008 11:33
организация связей между таблицами VenMaster БД в Delphi 4 28.05.2008 16:46