【发布时间】:2014-04-15 08:45:22
【问题描述】:
我有以下 VBA 代码,我调用 ThisWorkbook_Open,它将检查日期并查看是否有该周的工作表(它是供人们填写的时间表)。它会查看最近一周(从星期六开始)是否已经是有效的工作表,如果不是,它知道该周已经结束,并生成该周的报告(通过 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 行也可以正常工作。
工作簿需要共享(因为它是许多人使用的时间表),因此无法删除共享。
【问题讨论】: