Страницы: 1
RSS
Разрыв связей при экспорте листов в отдельный файл
 
Добрый вечер,

Есть готовый макрос который решает задачу отправки с кнопки заданных в ячейке названий листов, в нужную папку и под нужным именем. Все работает отлично с одним НО - остаются в новом файле связи с исходным файлом.

Помогите, пожалуйста допилить макрос чтобы разрывались связи, но не все значением стало, а только оборвались связи (как делаем обычно вручную: Данные - Изменить связи - Разорвать связи), но только зашить в базовый макрос.
4 строка (.BreakLink...) почему то не срабатывает.
Код
1
2
3
4
5
6
7
8
Sub Макрос1()
Dim p: p = Range("B1") & "\" & Range("B2") & ".xlsx"
  Sheets(Split(Range("B3"), "; ")).Copy
  ActiveWorkbook.BreakLink Name:=ThisWorkbook.FullName, Type:=xlExcelLinks
  ActiveWorkbook.SaveAs Filename:=p, FileFormat:=xlOpenXMLWorkbook _
    , CreateBackup:=False, AddToMru:=False
  ActiveWorkbook.Close 0
End Sub
 
Попробуй так:
Код
1
2
3
4
5
6
7
  WbLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
 
    For i = 1 To UBound(WbLinks)
 
         ActiveWorkbook.BreakLink Name:=WbLinks(i), Type:=xlLinkTypeExcelLinks
 
    Next
 
Изменено: Tigriwka - 14.02.2018 11:42:54
 
Попробовал вместо 4-й строки и после 4 строки вставлять - не работает + выдает ошибку "400"
 
Код в #2 не будет работать, если нет внешних ссылок. Немного измененный пример из документации:
Код
1
2
3
4
5
6
7
8
9
10
11
Sub UseBreakLink()
    Dim astrLinks, v
    astrLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
 
    If IsArray(astrLinks) Then
      For Each v In astrLinks
        ActiveWorkbook.BreakLink Name:=v, Type:=xlLinkTypeExcelLinks
      Next v
    End If
     
End Sub
Строку 4 из #1 удалите.
Владимир
 
sokol92, но ведь это самостоятельный макрос. Как правильно зашить его? Сейчас я настроил кнопку для первого макроса который сразу делает экспорт и закрывает этот новый файл. А для этого макроса отдельную кнопку? Можно его внутри сделать в одном макросе?

Или его вместо 4-й строки залить?

И отдельно попробовал и вместо 4-й. Пока без изменений.
Изменено: puh840 - 14.02.2018 18:46:56
 
Макрос из # 4 добавьте после своего. Вместо 4 строки Вашего макроса:
Код
1
UseBreakLink
Изменено: sokol92 - 14.02.2018 18:50:40
Владимир
 
sokol92, выдает ошибку 400 и связи остаются те же
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Макрос1()
Dim p: p = Range("B1") & "\" & Range("B2") & ".xlsx"
  Sheets(Split(Range("B3"), "; ")).Copy
  UseBreakLink
  ActiveWorkbook.SaveAs Filename:=p, FileFormat:=xlOpenXMLWorkbook _
    , CreateBackup:=False, AddToMru:=False
  ActiveWorkbook.Close 0
End Sub
Sub UseBreakLink()
    Dim astrLinks, v
    astrLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
    If IsArray(astrLinks) Then
      For Each v In astrLinks
        ActiveWorkbook.BreakLink Name:=v, Type:=xlLinkTypeExcelLinks
      Next v
    End If
End Sub
Изменено: puh840 - 14.02.2018 18:51:03
 
Приложил Ваш же пример. Сохранение новой книги и ее закрытие закомментировано. Ошибки не выдаются, внешние ссылки удаляются.
Владимир
 
sokol92, с закомментированными строками сработало. Раскомментировал, вроде тоже работает.

Перекладываю готовый раскомментированный макрос в свой файл и ... не работает так как на экспортируемом листе стоит защита.
 
Вы меняете формулы, содержащие внешние ссылки, на значения. На защищенном листе такой номер не пройдет (если только соответствующая ячейка не является не защищенной). Снимите защиту с необходимых листов перед заменой внешних ссылок, перед сохранением книги восстановите.
Владимир
 
sokol92, вариант со снятием защиты не подходит. Как вариант думаю уже вручную буду заходить в файлы и разрывать связи. Много правда.
 
Так вручную тоже придется снимать защиту.
Владимир
 
sokol92, а потом ставить обратно надо. Не защищенные ячейки только пустые для заполнения.
 
sokol92, Экспорт сейчас корректно происходит и с базовым макросом.
 
sokol92,  а можно заменить макрос на разрыв связей?
 
  Изменить можно любой макрос, но с какой целью? В #10 я, разумеется, предполагал, что снятие защиты и последующее восстановление защиты будут выполняться внутри макроса. Если этот макрос выполняет автор книги, то макрос может у него запросить пароль. Если "чужой", то придется зашивать пароль в код макроса и защищать уже проект. В любом случае, защита листов, структуры книги и проекта в Excel не может считаться надежной.
Владимир
 
sokol92, Около 70 раз нужно делать экспорт. Удалось многое оптимизировать. Остался маленький штрих с разрывом связей зашить в макрос.
А почему не срабатывает 4-я строка в моем примере?  
Изменено: puh840 - 14.02.2018 21:47:29
 
Я не "ругал" Вашу строку, просто предложил более надежный вариант. Если экспортируемые листы будут иметь ссылки на книгу, отличную от той, где хранится макрос, то Ваш вариант их не преобразует.
Что касается кода 400, то он возникает в момент сохранения книги (а не преобразования ссылок). Проверьте значение ячейки B1: на компьютере, где выполняется макрос, есть такая папка? У Вас есть к ней доступ по записи?
Изменено: sokol92 - 14.02.2018 22:17:07
Владимир
Страницы: 1
Читают тему
Loading...