У меня есть следующий код VBA, который я вызываю на ThisWorkbook_Open
, который проверит день и посмотрит, есть ли лист на эту неделю (его расписание для людей, чтобы заполнить) , Он видит, что последняя неделя (начиная с субботы) уже является действительным листом, и если она не знает, что неделя закончилась, и подготовить отчет на эту неделю (в формате PDF) и создать новый лист для текущей недели.Сохранение листов в формате PDF из общей книги через VBA
Sub getFirstDayofWeek()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim summWS As Worksheet
Dim loopSht As Worksheet
Dim thisWeek As String, lastWeek As String
Dim dateExists As Boolean
dateExists = False
Set summWS = ThisWorkbook.Sheets("Summary")
thisWeek = Format(Now() - Weekday(Now(), vbSaturday) + 1, "ddmmyy")
lastWeek = Format(Now() - Weekday(Now(), vbSaturday) - 6, "ddmmyy")
For Each loopSht In ThisWorkbook.Worksheets
If loopSht.Name = thisWeek Then
dateExists = True
Exit For
End If
Next
If dateExists Then
Debug.Print "Do nothing"
Else
Debug.Print "Do something"
runReport ("\\save\report\here\")
Sheets("Template").Copy After:=Sheets("Summary %")
Set ws = ActiveSheet
ws.Name = thisWeek
ws.Range("A1").Value = Now() - Weekday(Now(), vbSaturday) + 1
summWS.Rows("25:26").Copy
summWS.Rows("25:25").Insert Shift:=xlDown
Application.CutCopyMode = False
summWS.Rows("5:26").Replace What:=lastWeek, Replacement:=thisWeek, LookAt:=xlPart
End If
Sheets(thisWeek).Activate
Application.ScreenUpdating = True
End Sub
и суб делать сбережение ...
Sub runReport(Optional fileString As String = "C:\Temp\")
Dim reportWeek As String, filePath As String
If Right(fileString, 1) <> "\" Then
fileString = fileString & "\"
End If
reportWeek = Format(Now() - Weekday(Now(), vbSaturday) - 6, "ddmmyy")
If Dir(fileString, vbDirectory) = vbNullString Then
fileString = "\\another\backup\failsafe\path\"
MsgBox "Filepath not found. Will be saved as " & fileString
End If
filePath = fileString & "Times PDF - " & reportWeek & ".pdf"
Sheets(Array("Summary", "Summary %", reportWeek)).Select
Application.DisplayAlerts = False
ThisWorkbook.SaveAs filePath, 57
Application.DisplayAlerts = True
End Sub
Я обнаружил, что, когда учебное пособие является общим, я получаю 1004: Method 'SaveAs' or object '_Workbook' failed
ошибку на открытии, однако если запретить доступ к рабочей книге, то это работает хорошо. Очевидно также, что комментирование строки runReport
также заставляет ее работать нормально.
Рабочая книга должна использоваться совместно (как ее расписание, используемое рядом людей), поэтому удаление совместного использования не является вариантом.
Любые идеи? Благодаря