2014-04-15 5 views
1

У меня есть следующий код 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 также заставляет ее работать нормально.

Рабочая книга должна использоваться совместно (как ее расписание, используемое рядом людей), поэтому удаление совместного использования не является вариантом.

Любые идеи? Благодаря

ответ

0

(Если бы забыли об этом вопросе!)

Нашли обходной путь для этого. Не совсем решая, почему в этом случае это не работает, но я кратко разглядываю книгу в VBA, пока я сохраняю PDF-файл, а затем снова включаю этот ресурс.

Не идеален и не уверен, что могут возникнуть какие-либо проблемы, если кто-то еще откроет его в это точное время, но он работает для моих нужд (так как только немногие из нас используют это, и все мы находимся в пределах кричащего расстояния друг друга;))

Смежные вопросы