Здравствуйте! Давно возникла дурацкая проблема, но руки не доходили до решения, а когда понадобилось, столкнулся с невозможностью ее решить самостоятельно, поэтому обращаюсь к вам, к участникам данного форума и надеюсь на помощь знатоков. Excel 2003 Существует рабочая книга со связями с внешними файлами, один из которых DBF-4. При открытии книги постоянно выскакивает месседж о невозможности обносить связи. Я сделал нехитрый макрос в автозапуске, но он почему-то не работает. Помогите пожалуйста разобраться и сделать так, чтобы связь обновлялась и сообщение не выскакивало, чтобы не мешать дальнейшей работе других процедур. Спасибо!
[vba]
Код
Private Sub Auto_Open() 'Workbook_Open() 'On Error Resume Next sName = ActiveWorkbook.Name Application.DisplayAlerts = False Application.AskToUpdateLinks = False Workbooks.Open FileName:="D:\Report\bases\regions.DBF" Windows(sName).Activate ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(xlExcelLinks) ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(xlOLELinks) Windows("regions.DBF").Close 'ActiveWindow.Close 'Application.SendKeys ("~") End Sub
[/vba]
Здравствуйте! Давно возникла дурацкая проблема, но руки не доходили до решения, а когда понадобилось, столкнулся с невозможностью ее решить самостоятельно, поэтому обращаюсь к вам, к участникам данного форума и надеюсь на помощь знатоков. Excel 2003 Существует рабочая книга со связями с внешними файлами, один из которых DBF-4. При открытии книги постоянно выскакивает месседж о невозможности обносить связи. Я сделал нехитрый макрос в автозапуске, но он почему-то не работает. Помогите пожалуйста разобраться и сделать так, чтобы связь обновлялась и сообщение не выскакивало, чтобы не мешать дальнейшей работе других процедур. Спасибо!
[vba]
Код
Private Sub Auto_Open() 'Workbook_Open() 'On Error Resume Next sName = ActiveWorkbook.Name Application.DisplayAlerts = False Application.AskToUpdateLinks = False Workbooks.Open FileName:="D:\Report\bases\regions.DBF" Windows(sName).Activate ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(xlExcelLinks) ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources(xlOLELinks) Windows("regions.DBF").Close 'ActiveWindow.Close 'Application.SendKeys ("~") End Sub
Private Sub Auto_Open() Application.AskToUpdateLinks = False With ThisWorkbook Workbooks.Open .Path & "\regions.DBF" .ChangeLink Name:=.LinkSources(1)(1), NewName:= _ .Path & "\regions.DBF", Type:=xlExcelLinks Windows("regions.DBF").Close End With End Sub
[/vba] Файлы д.б. в одной папке. Неважно, где.
Попробуйте: [vba]
Код
Private Sub Auto_Open() Application.AskToUpdateLinks = False With ThisWorkbook Workbooks.Open .Path & "\regions.DBF" .ChangeLink Name:=.LinkSources(1)(1), NewName:= _ .Path & "\regions.DBF", Type:=xlExcelLinks Windows("regions.DBF").Close End With End Sub
[/vba] Файлы д.б. в одной папке. Неважно, где.KuklP
Неа, не срабатывает, т.е. прилинкованный путь меняется, но мессага всё равно появляется. Причем в редакторе при пошаговом выполнении сам макрос отрабатывает. А почему в авторане при открытии книги выдает сообщение непонятно
Неа, не срабатывает, т.е. прилинкованный путь меняется, но мессага всё равно появляется. Причем в редакторе при пошаговом выполнении сам макрос отрабатывает. А почему в авторане при открытии книги выдает сообщение непонятно kulib
Так связи-то при этом обновляет, жмите продолжить. И у меня сообщение срабатывает только первый раз, когда связь изменяется. При повторном открытии с уже измененной связью, сообщения нет.
Так связи-то при этом обновляет, жмите продолжить. И у меня сообщение срабатывает только первый раз, когда связь изменяется. При повторном открытии с уже измененной связью, сообщения нет.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Так связи-то при этом обновляет, жмите продолжить.
Так мне как раз и надо, чтобы мессага не появлялась! В этом проблема. Иначе зачем тогда Application.DisplayAlerts = False. У меня при повторном открытии с измененной связью сообщение также появляется. Сам дбф-ник то лежит всегда по статичному пути и в принципе изменение пути не предполагается. Я уже пробовал даже через Application.SendKeys ("~") его закрыть - не помогло.
Так связи-то при этом обновляет, жмите продолжить.
Так мне как раз и надо, чтобы мессага не появлялась! В этом проблема. Иначе зачем тогда Application.DisplayAlerts = False. У меня при повторном открытии с измененной связью сообщение также появляется. Сам дбф-ник то лежит всегда по статичному пути и в принципе изменение пути не предполагается. Я уже пробовал даже через Application.SendKeys ("~") его закрыть - не помогло.kulib
Согласен, через импорт проще. Но хотелось расковырять эту хрень. Может конечно это бага 2003-го экселя, но менять пакет я пока доооолго не собираюсь. kulib
Тогда как объяснить следующую вещь: Если предварительно в экселе открыть тот самый дбф-ник и потом открыть рабочую книгу (неважно с макросом в авторане или без него), то противная мессага не вылетает. Но если открывать тот же дбф-ник процедурой из открываемой книги по Auto_Open (как в шапке поста), то выскакивает! Я попробовал произвести запуск последовательно обоих файлов другой процедурой (допустим из PERSONAL.xls) и о ЧУДО - мессага не появилась, причём и мой первый макрос (тот что в шапке без изменений) отработал в открываемой рабочей книге без ошибки! Вот такие танцы с бубнами! ИМХО получается, что в момент открытия файла, еще до инициализации Auto_Open происходит обращение к связям и победить это можно только через ж....
Sub test2() Workbooks.Open FileName:="D:\Report\bases\regions.DBF" Workbooks.Open FileName:="D:\My Work\БАЗА.xls" 'всё сработало, мессага не появилась End Sub
Тогда как объяснить следующую вещь: Если предварительно в экселе открыть тот самый дбф-ник и потом открыть рабочую книгу (неважно с макросом в авторане или без него), то противная мессага не вылетает. Но если открывать тот же дбф-ник процедурой из открываемой книги по Auto_Open (как в шапке поста), то выскакивает! Я попробовал произвести запуск последовательно обоих файлов другой процедурой (допустим из PERSONAL.xls) и о ЧУДО - мессага не появилась, причём и мой первый макрос (тот что в шапке без изменений) отработал в открываемой рабочей книге без ошибки! Вот такие танцы с бубнами! ИМХО получается, что в момент открытия файла, еще до инициализации Auto_Open происходит обращение к связям и победить это можно только через ж....
Sub test2() Workbooks.Open FileName:="D:\Report\bases\regions.DBF" Workbooks.Open FileName:="D:\My Work\БАЗА.xls" 'всё сработало, мессага не появилась End Subkulib
В итоге решил не долбить мозг ни себе, ни людям. Объединил часть своего кода и присланного KuklP (Спасибо!), а противную мессагу закрыл в конце по Application.SendKeys ("~"). Ну в общем и фиг нс ним!
[vba]
Код
Private Sub Auto_Open() wbName = ActiveWorkbook.Name Application.DisplayAlerts = False Application.AskToUpdateLinks = False Windows(wbName).Activate ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways With ThisWorkbook Workbooks.Open "D:\Report\bases\regions.DBF" .ChangeLink Name:=.LinkSources(1)(1), NewName:= _ "D:\Report\bases\regions.DBF", Type:=xlExcelLinks Windows("regions.DBF").Close End With Application.SendKeys ("~") End Sub
[/vba]
В итоге решил не долбить мозг ни себе, ни людям. Объединил часть своего кода и присланного KuklP (Спасибо!), а противную мессагу закрыл в конце по Application.SendKeys ("~"). Ну в общем и фиг нс ним!
[vba]
Код
Private Sub Auto_Open() wbName = ActiveWorkbook.Name Application.DisplayAlerts = False Application.AskToUpdateLinks = False Windows(wbName).Activate ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways With ThisWorkbook Workbooks.Open "D:\Report\bases\regions.DBF" .ChangeLink Name:=.LinkSources(1)(1), NewName:= _ "D:\Report\bases\regions.DBF", Type:=xlExcelLinks Windows("regions.DBF").Close End With Application.SendKeys ("~") End Sub