У нас есть электронная таблица Excel, которая создает счета.Теперь нам нужно преобразовать электронную таблицу в pdf для отправки по электронной почте клиенту.
Я написал макрос, который «одним нажатием кнопки» создает файл .pdf и отображает его (в окне программы чтения Acrobat).
Однако, если пользователь намеренно или непреднамеренно нажимает кнопку 2-й раз, когда окно Acrobat все еще открыто - ошибки макроса.
Макрос:
Sub SaveAsPDF()
'
' SaveAsPDF Macro
'
'
Application.Goto Reference:="Print_Area"
sPath = ThisWorkbook.Path
'add 'Document Properties' CustomerName & CustOrderRef to the pdf doc.
ThisWorkbook.BuiltinDocumentProperties("title").Value = Range("H13").Value & "-ref:" & Range("H14") & "-" & FormatCurrency(Range("J115").Value, 2)
'get Inv# and CustomerName
'ThisFile = ThisWorkbook.Path & "\" & "Inv" & Range("H15").Value & "-" & Range("H13").Value & ".pdf"
ThisFile = ThisWorkbook.Path & "\" & "Inv.pdf"
MsgBox "The info. will now be copied to create a PDF Invoice." & vbCrLf & "Which will be saved in the 'Invoices' folder as:" & vbCrLf & ThisFile & vbCrLf & vbCrLf & "Please press OK, and when the PDF window opens - print 2 copies on Invoice Stationery." & vbCrLf & vbCrLf & "The PDF then can be closed. (its already been saved)"
'*** Note - this code arrors if pdf is already open ! ***
'Create pdf. save it and display it on-screen - for user to print
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
filename:=ThisFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
'save & close the spreadsheet
ActiveWorkbook.Close SaveChanges:=True
ThisWorkbook.Saved = True
Application.Quit
End Sub
Function IsFileOpen(fileFullName As String)
Dim FileNumber As Integer
Dim errorNum As Integer
'MgBox "123" & fileFullName
On Error Resume Next
FileNumber = FreeFile() ' Assign a free file number.
' Attempt to open the file and lock it.
Open fileFullName For Input Lock Read As #FileNumber
Close FileNumber ' Close the file.
errorNum = Err ' Assign the Error Number which occured
On Error GoTo 0 ' Turn error checking on.
' Now Check and see which error occurred and based
' on that you can decide whether file is already
' open
Select Case errorNum
' No error occurred so ErroNum is Zero (0)
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied." is 70
' File is already opened by another user.
Case 70
IsFileOpen = True
' For any other Error occurred
Case Else
Error errorNum
End Select
End Function
Я нашел (в StackOverflow) макросы, чтобы проверить, открыт ли файл (у другого пользователя), и другие см.: Функция IsFileOpen
выше.Но я не могу заставить их работать на меня.например, IsFileOpen
ошибки с
Ошибка errorNum
Как мне выполнить лучший / самый простой тест:
- Файл существует?
- Если так, он уже открыт для чтения?