Существует файл 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
vim5, У нас в сети, почему-то тоже бывают "косяки" при обращении к ресурсу по его доменному имени. Честно говоря, я не знаю с чем это связано (предполагаю, что в первую очередь, из-за отсутствия сисадминов). Я, обычно, в этом случае вместо имени использую IP. Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm". Айпи можно попробовать узнать через CMD.
vim5, У нас в сети, почему-то тоже бывают "косяки" при обращении к ресурсу по его доменному имени. Честно говоря, я не знаю с чем это связано (предполагаю, что в первую очередь, из-за отсутствия сисадминов). Я, обычно, в этом случае вместо имени использую IP. Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm". Айпи можно попробовать узнать через CMD.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Четверг, 17.08.2017, 09:04
А почему у вас "ссылки стали выглядеть" с указанием URI, если вы рассказываете про "диск P:"? Вы когда выбираете в диалоге местоположение нового файла в сети - заходите в каталоги через "сетевое окружение/Сеть", или через диск P:? Вы уж укажите правильно файл, если хотите использовать именно "букву диска" (и да, у вас эта буква должна быть назначена, и на один и тот же ресурс, у всех, кто будет файл использовать).
И в любом случае, убедитесь, что у вас ещё и права на сетевом ресурсе есть на запись, а не только на чтение.
И не нужен такой макрос, если вы хотите "только букву поменять в ссылках". Можно этот макрос порезать, оставив в нем только ту часть, которая "заменить только имя файла", только там в реплейсе надо не имя файла менять, а первый символ строки.
А почему у вас "ссылки стали выглядеть" с указанием URI, если вы рассказываете про "диск P:"? Вы когда выбираете в диалоге местоположение нового файла в сети - заходите в каталоги через "сетевое окружение/Сеть", или через диск P:? Вы уж укажите правильно файл, если хотите использовать именно "букву диска" (и да, у вас эта буква должна быть назначена, и на один и тот же ресурс, у всех, кто будет файл использовать).
И в любом случае, убедитесь, что у вас ещё и права на сетевом ресурсе есть на запись, а не только на чтение.
И не нужен такой макрос, если вы хотите "только букву поменять в ссылках". Можно этот макрос порезать, оставив в нем только ту часть, которая "заменить только имя файла", только там в реплейсе надо не имя файла менять, а первый символ строки.AndreTM
Roman777, AndreTM, А как можно указать путь чтобы для шаблонов Word получилось "Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm"" Я ведь ссылку изменяю либо макросом либо вручную (сменить источник). И получается как в файле "ссылки".
AndreTM Как получается что вместо адреса в шаблоне word P:\ТП к ЭС\Договор ТП\mm.xlsm получается \\nas\PTO\Договор ТП\mm.xlsm я не знаю - я всего лишь меняю источник ссылок либо макросом либо руками.
Название диска видно в файле "диск".
Roman777, AndreTM, А как можно указать путь чтобы для шаблонов Word получилось "Аля "\\192.168.x.x\PTO\Договор ТП\mm.xlsm"" Я ведь ссылку изменяю либо макросом либо вручную (сменить источник). И получается как в файле "ссылки".
AndreTM Как получается что вместо адреса в шаблоне word P:\ТП к ЭС\Договор ТП\mm.xlsm получается \\nas\PTO\Договор ТП\mm.xlsm я не знаю - я всего лишь меняю источник ссылок либо макросом либо руками.
Ещё раз. Меняете макросом. Макрос у вас спрашивает (открывает диалоговое окно) "где расположен новый файл"? В этом диалоговом окне - вы новое расположение файла ищете как? Через Диск P: или через Сеть?
Ещё раз. Меняете макросом. Макрос у вас спрашивает (открывает диалоговое окно) "где расположен новый файл"? В этом диалоговом окне - вы новое расположение файла ищете как? Через Диск P: или через Сеть?