Добавить эту функцию:
Public Function FileIsOpen(FullFilePath As String) As Boolean
Dim ff As Long
On Error Resume Next
ff = FreeFile()
Open FullFilePath For Input Lock Read As #ff
Close ff
FileIsOpen = (Err.Number <> 0)
On Error GoTo 0
End Function
Тогда используйте в своем коде:
If Not FileIsOpen(DocumentName & ".docx") Then
Set WordDoc = WordApp.Documents.Open(Filename:=Template, ReadOnly:=False)
Else
'Do something else because the file is already open.
End If
Имя документа должно быть полным путем к документу.
Пара других вещей:
Только Document
является строкой, а OutApp
является объектом. Все остальные переменные Variants
.
Dim TemplName, CurrentLocation, DocumentName, Document As String
Dim WordDoc, WordApp, OutApp As Object
Должно быть:
Dim TemplName As String, CurrentLocation As String, DocumentName As String, Document As String
Dim WordDoc As Object, WordApp As Object, OutApp As Object
VBA обычно использует +
для сложения и &
для объединения.
DocumentName + ".docx"
лучше написать как
DocumentName & ".docx"
Документ является зарезервированным словом в Word
. Это не должно вызывать особых проблем, так как код находится в Excel
, но что-то следует иметь в виду.