2014-04-15 47 views
1

我有以下VBA代碼,我致電ThisWorkbook_Open,該代碼將檢查當天並查看該周是否有工作表(其時間表供人填寫) 。它會查看最近一週(從星期六開始)是否已經是有效工作表,如果不是,那麼它知道本週已經結束,並生成該周的報告(以PDF格式),併爲當週創建一個新工作表。通過VBA將表格保存爲共享工作簿中的PDF

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

(已經忘記了這個問題!)

找到一個辦法解決這個。並不完全解決爲什麼它在這種情況下不起作用,但是我在保存PDF時暫時取消共享VBA中的工作簿,然後立即重新啓用共享。

不理想,也不確定是否有其他人在那個準確的時間打開它可能會導致任何問題,但它適用於我的需求(因爲我們只有少數人使用它,我們都在距離彼此;))