Помогите разобратся
Есть макрос для Corel x4 который при запуске берет имя текущего открытого файла и ищет файл с таким же именем на сетевом диске, если находит, открывает и копирует все содержимое это файла в ранее открытый файл, после чего удаляет файл с сетевого диска.
Скрипт работает нормально кроме одного но, если в файле на сетевом диске есть шрифты отсутствующие у меня, отсутствующий шриф автоматически заменяется не выводя никаких сообщений, как отловить этот момент и прервать выполнение скрипта?
код скрипта:
Dim LoricFileName As String
Dim LoricDocument As CorelDRAW.Document
Dim CurrDocument As CorelDRAW.Document
Dim LoricLayer As CorelDRAW.Layer
Dim PosY As Double
Dim PosX As Double
LoricFileName = Dir("\\путь до сетевой папки" & ActiveDocument.FileName)
If LoricFileName = "" Then
MsgBox "Файл с соответствующим номером не найден"
Exit Sub
End If
LoricFileName = "\\путь до сетевой папки" & ActiveDocument.FileName
Set CurrDocument = ActiveDocument
'удалить все направляющие из CurrDocument
CurrDocument.MasterPage.GuidesLayer.Shapes.All.Delete
PosY = CurrDocument.ActiveLayer.Shapes.All.PositionY - CurrDocument.ActiveLayer.Shapes.All.SizeHeight - 1
PosX = CurrDocument.ActiveLayer.Shapes.All.PositionX
Set LoricDocument = Application.OpenDocument(LoricFileName)
'удалить все направляющие из LoricDocument
LoricDocument.ClearSelection
CurrDocument.ClearSelection
LoricDocument.MasterPage.GuidesLayer.Shapes.All.Delete
Clipboard.Clear
'For Each LoricLayer In LoricDocument.ActivePage.Layers
' 'MsgBox LoricLayer.Name
' LoricDocument.ActivePage.Shapes.All.AddToSelection
'Next LoricLayer
LoricDocument.ActivePage.Shapes.All.CreateSelection
'LoricDocument.Selection.Copy
ActiveSelection.Copy
CurrDocument.ActiveLayer.Paste
LoricDocument.Save
LoricDocument.Close
CurrDocument.Activate
Application.ActiveSelection.SetPosition PosX, PosY
CurrDocument.Save
On Error GoTo Err_LoricImport
Kill LoricFileName
Exit_LoricImport:
Exit Sub
Err_LoricImport:
MsgBox Err.Description
Resume Exit_LoricImport
End Sub
Есть макрос для Corel x4 который при запуске берет имя текущего открытого файла и ищет файл с таким же именем на сетевом диске, если находит, открывает и копирует все содержимое это файла в ранее открытый файл, после чего удаляет файл с сетевого диска.
А почему просто не копирует _файл_ (а не _содержимое_) себе и не открывает его?
Кроме того шрифты имхо не находятся в файле кореловском, а только его название, что как бы делает поведение корела вполне оправданным - нет шрифта , заменяем его на первый нашедшийся.
Так сделано специально, в причины углубляться не буду, просто первый файл заменять нельзя, по этому картинка скопированная с сетевого диска, вставляется строго под уже имеющейся.
Кроме того шрифты имхо не находятся в файле кореловском, а только его название, что как бы делает поведение корела вполне оправданным - нет шрифта , заменяем его на первый нашедшийся.
Я думаю это логично т.к. если бы шрифт находился в самом файле, корел на отсутствие шрифта не ругался.
Странно что при открытии файла руками (кликая мышкой или через "Открыть") корел сообщает об отсутствии шрифта и предлагает заменить его, открывая же через скрипт никаких уведомлений нет.
Одно решение проблемы я нашел, решение состоит в открытии файла не через Application.OpenDocument(FileName), а через ShellExecute, в таком случае корел ругается на отсутствие шрифта.
Далее, сразу после открытия файла сравниваем директории первого открытого файла (заранее сохранив в переменной) и текущего открытого и если они не одинаковые тогда уже копируем и тд, если нет прерываем скрипт.
Но такое решение не правильное, в идеале хотелось бы чтобы, автоматически шрифт не заменился, файл не открывался, а ошибку отсутствия шрифта выдавать сообщение через MsgBox.
Либо, как еще один вариант,чтобы этот злосчастное предложения замены шрифта появлялось, а решение о замене или отмене отлавливать не так как я (даже не знаю как назвать этот "способ"), а нормально, ведь должна быть какая то возможность.