#vba #macos #directory #pdf-generation #create-directory
Вопрос:
Мне нужно экспортировать PDF-файл из «модуля» рабочего листа Excel из следующего кода:
ссылка здесь: https://drive.google.com/file/d/1H1os30Tn03x_q8HxLWBy_pZpxh_Rs7Gk/view?usp=sharing
Sub FillForm()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Desiredrow = InputBox("Immettere il numero della prima riga per la quale si desidera creare il pdf", "Numero di riga?")
Endrowno = InputBox("Immettere il numero dell'ultima riga per la quale si desidera creare il pdf", "Numero di riga?")
If IsNumeric(Desiredrow) = True And IsNumeric(Endrowno) = True Then
For i = Desiredrow To Endrowno
ThisWorkbook.Worksheets("modulo").Range("C10") = Date
ThisWorkbook.Worksheets("modulo").Range("D11") = ThisWorkbook.Worksheets("database").Range("G" amp; i)
ThisWorkbook.Worksheets("modulo").Range("C12") = ThisWorkbook.Worksheets("database").Range("H" amp; i) amp; " a " amp; ThisWorkbook.Worksheets("database").Range("J" amp; i)
ThisWorkbook.Worksheets("modulo").Range("D13") = ThisWorkbook.Worksheets("database").Range("V" amp; i) amp; " , " amp; ThisWorkbook.Worksheets("database").Range("T" amp; i)
Call GeneratePDF
Next i
MsgBox "pdf generato con successo"
Else
MsgBox "il numero di riga deve essere un valore numerico"
End If
ThisWorkbook.Worksheets("database").Activate
Application.DisplayAlerts = False
Application.ScreenUpdating = True
End Sub
приведенный выше код вызовет GeneratePDF после получения номера начальной и конечной строк.
Sub GeneratePDF()
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
Dim VelleName As String
Dim SelectedRange As Range
With ThisWorkbook.Worksheets("modulo")
.Activate
.Range(.Cells(1, 1), .Cells(33, 10)).Select
Selection.Name = "SelectedRange"
End With
On Error GoTo errHandler
Set wbA = ActiveWorkbook
Set wsA = ActiveWorkbook.Worksheets("modulo")
strTime = Format(Now(), "ddmmyyyy_hhmmss")
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
strPath = Application.DefaultFilePath
End If
strPath = strPath amp; Application.PathSeparator
VelleName = ThisWorkbook.Worksheets("database").Range("E" amp; i) amp; ThisWorkbook.Worksheets("database").Range("B" amp; i) amp; "_" amp; ThisWorkbook.Worksheets("database").Range("C" amp; i)
'replace spaces and periods in sheet name
strName = Replace(VelleName, " ", "_")
strName = Replace(strName, ".", "_")
strName = Replace(strName, "-", "_")
strName = Replace(strName, "/", "_")
'create default name for savng file
strFile = strName amp; "_" amp; strTime amp; ".pdf"
strPathFile = strName amp; "_" amp; strTime
'select folder for file
If Dir(strPath amp; Application.PathSeparator amp; "forme", vbDirectory) = "" Then '<== check if folder exists
MkDir ThisWorkbook.Path amp; Application.PathSeparator amp; "forme" '<== Create Folder
End If
myFile = ThisWorkbook.Path amp; Application.PathSeparator amp; "forme" amp; Application.PathSeparator amp; strPathFile
'myFile = ThisWorkbook.Path amp; Application.PathSeparator amp; strPathFile
'export to PDF if a folder was selected
If myFile <> "False" Then
With wsA.PageSetup
.Orientation = xlPortrait
.PrintArea = "SelectedRange"
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With
wsA.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Impossibile creare il file pdf"
Resume exitHandler
End Sub
приведенный выше код отлично работает на моем ПК с Windows (Windows 7, office 2010-13), но когда я делаю это на Mac, он не работает. и генерировать ошибку.
Ошибка заключается в GeneratePDF
том, где мы создаем папку, если она не существует.
Где я делаю это неправильно? пожалуйста, помогите