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

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обновление ссылок макросом между файлами exel и word - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Обновление ссылок макросом между файлами exel и word
vim5 Дата: Четверг, 17.08.2017, 08:32 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

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

Существует файл exel (mm.xlsm) с данными и файлы-шаблоны word. Между файлом exel и файлами word есть ссылки.
Когда приходит новый клиент, папку со всеми шаблонами копирую в новое место, заполняю шаблон exel и с помощью макроса обновляю все ссылки в файлах word.
Ранее папка с шаблонами находилась на диске D на компьютере. Все ссылки в файлах word были обращены к соответствующему файлу exel
--- D:\ТП к ЭС\Договор ТП\mm.xlsm
Для удобства доступа других сотрудников шаблоны перенесли на сетевой диск P:\ТП к ЭС\Договор ТП\mm.xlsm
Ссылки в шаблонах word изменил. В документах word стали выглядеть так: \\nas\PTO\Договор ТП\mm.xlsm
то есть вместо буквы P: видит \\nas\PTO. Я думаю проблема в этом - в названии сетевого диска.
Если брать шаблон для нового клиента с сетевого диска то макрос выдаёт ошибку, если брать старый (с диска D) то работает. Хотелось бы чтобы у всех был одинаковый шаблон с сетевого.
Помогите разобраться почему макрос (когда-то найденный в сети и немного переделанный, (спасибо автору)) выдаёт ошибку:

Файлы с примерами (архивированный файл) и картинка с ошибкой во вложении.

[vba]
Код
Sub ссылки()
'
' ссылки Макрос
'
'
  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 = "mm.xlsm"
  
  'Выбор нового файла
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выберите новый файл, с которым должен быть связан документ"
    .AllowMultiSelect = False
    .ButtonName = "Выбрать"
    .Filters.Clear
    .Filters.Add "Книга Excel с поддержкой макросов", "*.xlsm"
    .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]
 
Ответить
СообщениеДобрый день!

Существует файл exel (mm.xlsm) с данными и файлы-шаблоны word. Между файлом exel и файлами word есть ссылки.
Когда приходит новый клиент, папку со всеми шаблонами копирую в новое место, заполняю шаблон exel и с помощью макроса обновляю все ссылки в файлах word.
Ранее папка с шаблонами находилась на диске D на компьютере. Все ссылки в файлах word были обращены к соответствующему файлу exel
--- D:\ТП к ЭС\Договор ТП\mm.xlsm
Для удобства доступа других сотрудников шаблоны перенесли на сетевой диск P:\ТП к ЭС\Договор ТП\mm.xlsm
Ссылки в шаблонах word изменил. В документах word стали выглядеть так: \\nas\PTO\Договор ТП\mm.xlsm
то есть вместо буквы P: видит \\nas\PTO. Я думаю проблема в этом - в названии сетевого диска.
Если брать шаблон для нового клиента с сетевого диска то макрос выдаёт ошибку, если брать старый (с диска D) то работает. Хотелось бы чтобы у всех был одинаковый шаблон с сетевого.
Помогите разобраться почему макрос (когда-то найденный в сети и немного переделанный, (спасибо автору)) выдаёт ошибку:

Файлы с примерами (архивированный файл) и картинка с ошибкой во вложении.

[vba]
Код
Sub ссылки()
'
' ссылки Макрос
'
'
  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 = "mm.xlsm"
  
  'Выбор нового файла
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выберите новый файл, с которым должен быть связан документ"
    .AllowMultiSelect = False
    .ButtonName = "Выбрать"
    .Filters.Clear
    .Filters.Add "Книга Excel с поддержкой макросов", "*.xlsm"
    .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]

Автор - vim5
Дата добавления - 17.08.2017 в 08:32
Roman777 Дата: Четверг, 17.08.2017, 09:03 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
vim5, У нас в сети, почему-то тоже бывают "косяки" при обращении к ресурсу по его доменному имени. Честно говоря, я не знаю с чем это связано (предполагаю, что в первую очередь, из-за отсутствия сисадминов). Я, обычно, в этом случае вместо имени использую IP. Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm". Айпи можно попробовать узнать через CMD.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 17.08.2017, 09:04
 
Ответить
Сообщениеvim5, У нас в сети, почему-то тоже бывают "косяки" при обращении к ресурсу по его доменному имени. Честно говоря, я не знаю с чем это связано (предполагаю, что в первую очередь, из-за отсутствия сисадминов). Я, обычно, в этом случае вместо имени использую IP. Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm". Айпи можно попробовать узнать через CMD.

Автор - Roman777
Дата добавления - 17.08.2017 в 09:03
AndreTM Дата: Четверг, 17.08.2017, 10:24 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
А почему у вас "ссылки стали выглядеть" с указанием URI, если вы рассказываете про "диск P:"?
Вы когда выбираете в диалоге местоположение нового файла в сети - заходите в каталоги через "сетевое окружение/Сеть", или через диск P:?
Вы уж укажите правильно файл, если хотите использовать именно "букву диска" (и да, у вас эта буква должна быть назначена, и на один и тот же ресурс, у всех, кто будет файл использовать).

И в любом случае, убедитесь, что у вас ещё и права на сетевом ресурсе есть на запись, а не только на чтение.

И не нужен такой макрос, если вы хотите "только букву поменять в ссылках". Можно этот макрос порезать, оставив в нем только ту часть, которая "заменить только имя файла", только там в реплейсе надо не имя файла менять, а первый символ строки.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА почему у вас "ссылки стали выглядеть" с указанием URI, если вы рассказываете про "диск P:"?
Вы когда выбираете в диалоге местоположение нового файла в сети - заходите в каталоги через "сетевое окружение/Сеть", или через диск P:?
Вы уж укажите правильно файл, если хотите использовать именно "букву диска" (и да, у вас эта буква должна быть назначена, и на один и тот же ресурс, у всех, кто будет файл использовать).

И в любом случае, убедитесь, что у вас ещё и права на сетевом ресурсе есть на запись, а не только на чтение.

И не нужен такой макрос, если вы хотите "только букву поменять в ссылках". Можно этот макрос порезать, оставив в нем только ту часть, которая "заменить только имя файла", только там в реплейсе надо не имя файла менять, а первый символ строки.

Автор - AndreTM
Дата добавления - 17.08.2017 в 10:24
vim5 Дата: Четверг, 17.08.2017, 13:23 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, AndreTM,
А как можно указать путь чтобы для шаблонов Word получилось "Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm""
Я ведь ссылку изменяю либо макросом либо вручную (сменить источник). И получается как в файле "ссылки".

AndreTM
Как получается что вместо адреса в шаблоне word P:\ТП к ЭС\Договор ТП\mm.xlsm получается \\nas\PTO\Договор ТП\mm.xlsm я не знаю - я всего лишь меняю источник ссылок либо макросом либо руками.

Название диска видно в файле "диск".


Сообщение отредактировал vim5 - Четверг, 17.08.2017, 13:25
 
Ответить
СообщениеRoman777, AndreTM,
А как можно указать путь чтобы для шаблонов Word получилось "Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm""
Я ведь ссылку изменяю либо макросом либо вручную (сменить источник). И получается как в файле "ссылки".

AndreTM
Как получается что вместо адреса в шаблоне word P:\ТП к ЭС\Договор ТП\mm.xlsm получается \\nas\PTO\Договор ТП\mm.xlsm я не знаю - я всего лишь меняю источник ссылок либо макросом либо руками.

Название диска видно в файле "диск".

Автор - vim5
Дата добавления - 17.08.2017 в 13:23
AndreTM Дата: Четверг, 17.08.2017, 13:44 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
я всего лишь меняю источник ссылок либо макросом
Ещё раз.
Меняете макросом.
Макрос у вас спрашивает (открывает диалоговое окно) "где расположен новый файл"?
В этом диалоговом окне - вы новое расположение файла ищете как? Через Диск P: или через Сеть?

И получается как в файле "ссылки"
Название диска видно в файле "диск"
Это вы о чём? Никаких файлов мы что-то не видим... :)
Вы обратили внимание, что в посте отсутствуют ваши вложения?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
я всего лишь меняю источник ссылок либо макросом
Ещё раз.
Меняете макросом.
Макрос у вас спрашивает (открывает диалоговое окно) "где расположен новый файл"?
В этом диалоговом окне - вы новое расположение файла ищете как? Через Диск P: или через Сеть?

И получается как в файле "ссылки"
Название диска видно в файле "диск"
Это вы о чём? Никаких файлов мы что-то не видим... :)
Вы обратили внимание, что в посте отсутствуют ваши вложения?

Автор - AndreTM
Дата добавления - 17.08.2017 в 13:44
  • Страница 1 из 1
  • 1
Поиск:

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