Страницы: 1
RSS
Изменение ссылок в формулах в книге с помощью VBA.
 
Добрый день.
Есть открытая книга, в которой в формулах есть ссылки на сторонний документ в сети, вроде такой ='\path\DATA\[wsName.xlsm]Discription'!$E$13
Есть вторая открытая книга, например 1.0.xlsm.
Я хочу заменить "\path\DATA\[wsName.xlsm]" на новый путь книги.
Пытался делать так:
Код
For Each wb In Application.Workbooks 
    If wb.name Like "1.0*" Then
        newAddress = wb.path & "\[" & wb.name & "]" 'Получаем ссылку
    End If
Next

Dim ttt As String
ttt = "\\path\DATA\[wsName.xlsm]"
With ThisWorkbook.Worksheets(1).UsedRange
    .Replace What:=ttt, _
    Replacement:=newAddress, _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End With

Но не работает. Ничего не происходит.
Пытался делать так, тоже не работает:
Код
    ThisWorkbook.ChangeLink name:= _
        "path\DATA\wsName.xlsm", NewName:=newAddress _
        , Type:=xlExcelLinks

Причем, если вместо newAddress вписать путь открытой книги - все равно не работает. А если вместо newAddress вписать путь другой книги (которая не открыта), то все отработает нормально.
Поэтому предполагаю, что это связано с тем, что данная книга открыта.

Отсюда вопрос, как можно исправить ситуацию? Или может быть вы подскажете хороший способо обновить все ссылки в формулах в книге на новый путь (новый путь - путь второй открытой(!!!) книги).
Спасибо
Изменено: crjk - 06.12.2018 15:41:23
 
Код
While x <= UBound(FilesToOpen)
        Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
        
        Dim aL(), i&, s
        aL = importWB.LinkSources(xlExcelLinks)
        If IsEmpty(aL) Then Exit Sub
        For i = 1 To UBound(aL)
            s = Split(aL(i), "\")
            Application.StatusBar = FilesToOpen(x) + " - " + s(UBound(s))
            importWB.ChangeLink aL(i), importWB.Path & "\" & s(UBound(s)), 1
            importWB.UpdateLink Name:=importWB.Path & "\" & s(UBound(s)), Type:=xlExcelLinks
        Next
        importWB.RefreshAll
        importWB.Close savechanges:=True
        x = x + 1
    Wend
 
skais675, Спасибо, буду пробовать
 
Цитата
crjk написал:
Поэтому предполагаю, что это связано с тем, что данная книга открыта.
именно. сделайте проверку открыта книга или нет и если открыта не добавляйте путь в новой ссылке. добавьте функцию IsBookOpen из примеров по ссылке и замените часть кода
Код
For Each wb In Application.Workbooks
    If wb.Name Like "1.0*" Then
        newAddress = IIf(IsBookOpen(wb.Name), "", wb.Path & "\") & "[" & wb.Name & "]"
    End If
Next
Изменено: DenSyo - 07.12.2018 14:59:42
Страницы: 1
Наверх