Добрый день.
В ходе работы озадачился созданием макроса, который будет сохранять копию рабочего файла с заданным именем из ячейки, без связей и без макросов, а так же скрыв определенный лист.
Все бы хорошо, да есить несколько проблем:
1. После сохранения файла в нужную директорию, слудеющий шаг-открытие файла и разрыв связей. Тут при открытии файл просит изменить связи. Логично предположить, что разрыв должен происходить до открытия, но в таком случае связи разрываются и в рабочем файле. С моими пока еще скудными знаниями ВБА решить этот момент не получается.
2. На выходе получаем файл удовлетворяющий условиям, но при открытии файла появляется сообщение:"Действительный формат открываемого файла отличается от указываемого его расширением имени файла... " .
Буду очень признателен,если подскажете как можно решить данные проблемы.
Вот мое творение:
| Код |
|---|
Sub Сохранение()
Dim x As String
strPath = "C:\Users\AVL\Desktop\Копилка"
On Error Resume Next
x = GetAttr(strPath) And 0
If Err = 0 Then
FileNameXls = strPath & "\" & "Сопоставимые АЗС" & " " & Sheets("Свод").Range("E2").Value & ".xls"
ActiveWorkbook.SaveCopyAs Filename:=FileNameXls
Else
MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical
End If
Workbooks.Open (strPath & "\" & "Сопоставимые АЗС" & " " & Sheets("Свод").Range("E2").Value & ".xls")
Dim iLinks As Variant, i&
iLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(iLinks) Then
For i = 1 To UBound(iLinks)
ActiveWorkbook.BreakLink Name:=iLinks(i), Type:=xlExcelLinks
Next i
End If
Dim oVBComponent As Object, lCountLines As Long
If ActiveWorkbook.VBProject.Protection = 1 Then
MsgBox "VBProject выбранной книги защищён." & vbCrLf & _
" Компоненты не будут удалены.", vbExclamation, "Отмена выполнения"
Exit Sub
End If
For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
On Error Resume Next
With oVBComponent
Select Case .Type
Case 1
.Collection.Remove oVBComponent
Case 2 '
.Collection.Remove oVBComponent
Case 3
.Collection.Remove oVBComponent
Case 100
lCountLines = .CodeModule.CountOfLines
.CodeModule.DeleteLines 1, lCountLines
End Select
End With
Next
Set oVBComponent = Nothing
ActiveWorkbook.Sheets("Свод").Visible = False
ActiveWorkbook.Close = False
End Sub |