Здравствуйте знатоки))) В VBA я ни чего не понимаю, но без этого наверное тут ни как не обойтись. У меня есть файл на работе, выложить его к сожалению нет возможностей, но попробую пояснить. 1. Файл долго работает при расчете формул и я разделил его на 2 части. Работа стала на много быстрее и все же есть несколько НО после этого. 2. Теперь открывая 1 или 2 файл он выдает - Эта книга содержит связи с внешним источником…… Обновить - Не обновлять. 3. В формулах после разделения есть скажем так адрес 'C:\Users\Джим\Desktop\[1.xlsx] и если я меняю имя файла или переношу его в другую папку, то естественно формулы уже не работают. Возможно ли сделать, чтобы 1. Обновление данных производилось автоматически в этих двух файлах. 2. И если будет меняться имя 1 или 2 файла, или переносится в другое место, то так же формулы работали. (Хотя имена файлов в принципе не так важно, главное чтобы при переносе в другое место работали формулы).
Здравствуйте знатоки))) В VBA я ни чего не понимаю, но без этого наверное тут ни как не обойтись. У меня есть файл на работе, выложить его к сожалению нет возможностей, но попробую пояснить. 1. Файл долго работает при расчете формул и я разделил его на 2 части. Работа стала на много быстрее и все же есть несколько НО после этого. 2. Теперь открывая 1 или 2 файл он выдает - Эта книга содержит связи с внешним источником…… Обновить - Не обновлять. 3. В формулах после разделения есть скажем так адрес 'C:\Users\Джим\Desktop\[1.xlsx] и если я меняю имя файла или переношу его в другую папку, то естественно формулы уже не работают. Возможно ли сделать, чтобы 1. Обновление данных производилось автоматически в этих двух файлах. 2. И если будет меняться имя 1 или 2 файла, или переносится в другое место, то так же формулы работали. (Хотя имена файлов в принципе не так важно, главное чтобы при переносе в другое место работали формулы).feksel
feksel, Переносите оба файла, или только один? Одновременно или перенесли, запустили... Можете подробней процесс описать? Может хотя бы часть файлов?
feksel, Переносите оба файла, или только один? Одновременно или перенесли, запустили... Можете подробней процесс описать? Может хотя бы часть файлов?lFJl
Переносите оба файла, или только один? Одновременно или перенесли, запустили...
Если файлы будут переносится сразу оба. Запускается и заполняется чаще всего первый, второй файл открывается реже и в него в основном уже берутся данные заполненные в первом.
Переносите оба файла, или только один? Одновременно или перенесли, запустили...
Если файлы будут переносится сразу оба. Запускается и заполняется чаще всего первый, второй файл открывается реже и в него в основном уже берутся данные заполненные в первом.
Можете подробней процесс описать? Может хотя бы часть файлов?
Вот создал подобный простенький файлик, формулы конечно в оригинальном сложнее на много и листов конечно по несколько, но смысл в принципе одинаковый.feksel
Самое простое - не переносите файлы, а откройте их (оба) и пересохраните в нужное место. Если все-таки нужно переносить, то после переноса откройте файлы и в каждом поменяйте путь для ссылки на другой файл Данные - Изменить связи
А чтобы не спрашивал про обновление, нажмите там (Данные - Изменить связи) на кнопку "Запрос на обновление связей" и поставьте нужную точку. Возможно, что придется еще изменить настройки безопасности Файл - Параметры - Центр управления безопасностью (ЦУБ) - параметры ЦУБ
Самое простое - не переносите файлы, а откройте их (оба) и пересохраните в нужное место. Если все-таки нужно переносить, то после переноса откройте файлы и в каждом поменяйте путь для ссылки на другой файл Данные - Изменить связи
А чтобы не спрашивал про обновление, нажмите там (Данные - Изменить связи) на кнопку "Запрос на обновление связей" и поставьте нужную точку. Возможно, что придется еще изменить настройки безопасности Файл - Параметры - Центр управления безопасностью (ЦУБ) - параметры ЦУБ_Boroda_
В одном месте нашел запись, вроде по этой формуле можно задействовать авто замену, как раз то что мне надо, но что только не пробовал не получается. Менял форматы моих файлов на - Книга с поддержкой макросов, потом в формуле как только и куда только не вставлял - C:\Users\Джим\Desktop\[2.xlsx] и без таких [] скобок, эту запись. Не работает, подскажите как ее задействовать??? Или эта запись не подходит по моему вопросу???
Вот что пробовал задействовать:
[vba]
Код
Sub ChangeLinks() Dim oFld As Field 'Поле Dim OldFileName As String 'Старое имя файла Dim NewFileName As String 'Новое имя файла Dim FieldCode As String 'Код поля Dim ReplaceAllPath As Boolean 'Заменять весь путь к файлу или только имя Dim StartPath As Integer, EndPath As Integer 'Начало и конец пути к файлу в коде поля
'Ввод старого имени файла OldFileName = InputBox("C:\Users\Джим\Desktop\[2.xlsx]", "Изменение ссылок", OldFileName) If Len(OldFileName) = 0 Then Exit Sub
'Выбор нового файла With Application.FileDialog(msoFileDialogFilePicker) .Title = "C:\Users\Джим\Desktop\[2.xlsx]" .AllowMultiSelect = False .ButtonName = "Выбрать" .Filters.Clear .Filters.Add "Таблицы Excel", "*.xls; *.xlsx" If .Show Then NewFileName = .SelectedItems(1) Else Exit Sub End With
'Если изменилось не только имя, но и местоположение, то можно заменить весь путь ReplaceAllPath = MsgBox("Заменять весь путь? Нажмите ""Нет"", чтобы заменить только имя файла", vbYesNo + vbInformation, "Изменение ссылок") = vbYes
NewFileName = Replace(NewFileName, "\", "\\") 'Перебираем все поля в документе For Each oFld In ActiveDocument.Fields If oFld.Type = wdFieldLink Then 'Если поле является полем ссылки FieldCode = oFld.Code.Text If InStr(oFld.Code.Text, "Excel.Sheet") <> 0 And InStr(FieldCode, "\\" & OldFileName) <> 0 Then 'Если поле ссылается на лист Excel и на нужный файл If ReplaceAllPath Then 'Если нужно заменить весь путь StartPath = InStr(FieldCode, ":\\") - 2 EndPath = InStr(FieldCode, "\\" & OldFileName) + Len(OldFileName) + 2 FieldCode = Mid(FieldCode, 1, StartPath) & NewFileName & Mid(FieldCode, EndPath) Else 'Если нужно заменить только имя файла FieldCode = Replace(FieldCode, OldFileName, Mid(NewFileName, InStrRev(NewFileName, "\") + 1)) End If End If End If oFld.Code.Text = FieldCode Next End Sub
[/vba]
В одном месте нашел запись, вроде по этой формуле можно задействовать авто замену, как раз то что мне надо, но что только не пробовал не получается. Менял форматы моих файлов на - Книга с поддержкой макросов, потом в формуле как только и куда только не вставлял - C:\Users\Джим\Desktop\[2.xlsx] и без таких [] скобок, эту запись. Не работает, подскажите как ее задействовать??? Или эта запись не подходит по моему вопросу???
Вот что пробовал задействовать:
[vba]
Код
Sub ChangeLinks() Dim oFld As Field 'Поле Dim OldFileName As String 'Старое имя файла Dim NewFileName As String 'Новое имя файла Dim FieldCode As String 'Код поля Dim ReplaceAllPath As Boolean 'Заменять весь путь к файлу или только имя Dim StartPath As Integer, EndPath As Integer 'Начало и конец пути к файлу в коде поля
'Ввод старого имени файла OldFileName = InputBox("C:\Users\Джим\Desktop\[2.xlsx]", "Изменение ссылок", OldFileName) If Len(OldFileName) = 0 Then Exit Sub
'Выбор нового файла With Application.FileDialog(msoFileDialogFilePicker) .Title = "C:\Users\Джим\Desktop\[2.xlsx]" .AllowMultiSelect = False .ButtonName = "Выбрать" .Filters.Clear .Filters.Add "Таблицы Excel", "*.xls; *.xlsx" If .Show Then NewFileName = .SelectedItems(1) Else Exit Sub End With
'Если изменилось не только имя, но и местоположение, то можно заменить весь путь ReplaceAllPath = MsgBox("Заменять весь путь? Нажмите ""Нет"", чтобы заменить только имя файла", vbYesNo + vbInformation, "Изменение ссылок") = vbYes
NewFileName = Replace(NewFileName, "\", "\\") 'Перебираем все поля в документе For Each oFld In ActiveDocument.Fields If oFld.Type = wdFieldLink Then 'Если поле является полем ссылки FieldCode = oFld.Code.Text If InStr(oFld.Code.Text, "Excel.Sheet") <> 0 And InStr(FieldCode, "\\" & OldFileName) <> 0 Then 'Если поле ссылается на лист Excel и на нужный файл If ReplaceAllPath Then 'Если нужно заменить весь путь StartPath = InStr(FieldCode, ":\\") - 2 EndPath = InStr(FieldCode, "\\" & OldFileName) + Len(OldFileName) + 2 FieldCode = Mid(FieldCode, 1, StartPath) & NewFileName & Mid(FieldCode, EndPath) Else 'Если нужно заменить только имя файла FieldCode = Replace(FieldCode, OldFileName, Mid(NewFileName, InStrRev(NewFileName, "\") + 1)) End If End If End If oFld.Code.Text = FieldCode Next End Sub
Совершенно верно. Это макрос обновления ссылок в кодах полей LINK Ворда. Для Excel тоже можно написать похожее, но зачем? Неужели Вы так часто переносите свои связанные файлы?
Совершенно верно. Это макрос обновления ссылок в кодах полей LINK Ворда. Для Excel тоже можно написать похожее, но зачем? Неужели Вы так часто переносите свои связанные файлы?_Boroda_
Неужели Вы так часто переносите свои связанные файлы?
Да вот в этом то и дело, что они часто переносятся и сбрасываются на отчеты. На отчеты сбросил, ссылки естественно ни кто не менял в итоге мне по шеям(((
Неужели Вы так часто переносите свои связанные файлы?
Да вот в этом то и дело, что они часто переносятся и сбрасываются на отчеты. На отчеты сбросил, ссылки естественно ни кто не менял в итоге мне по шеям(((feksel