通过VBA将工作表从PDF保存为共享工作簿

我有下面的VBA代码,我打电话给ThisWorkbook_Open ,它将检查一天,看看是否有一个工作表(填写人的时间表)。 它会查看最近一周(从星期六开始)是否已经是有效的工作表,如果不是,则知道本周已经结束,并为当周生成报告(以PDF格式),并为当周创build一个新工作表。

 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打开1004: Method 'SaveAs' or object '_Workbook' failed错误,但是,如果我取消共享工作簿,那么它工作正常。 显然,注释runReport行也使它工作正常。

该工作簿需要共享(作为一个时间表由一些人使用),所以删除共享不是一个选项。

有任何想法吗? 谢谢

(已经忘记了这个问题!)

为此find一个解决方法。 不完全解决为什么在这种情况下不起作用,但我保存PDF,然后在之后立即重新启用共享,在VBA中暂时取消共享工作簿。

不理想,也不确定是否有其他人在那个时间开放,可能会引起任何问题,但是这对我的需求是有效的(因为只有less数人使用这种方式,而且我们都在彼此之间的距离内); )