【问题标题】:How do I save sheets as PDF from a Shared Workbook via VBA?如何通过 VBA 将共享工作簿中的工作表另存为 PDF?
【发布时间】: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 行也可以正常工作。

工作簿需要共享(因为它是许多人使用的时间表),因此无法删除共享。

【问题讨论】:

    标签: vba pdf excel


    【解决方案1】:

    找到了解决方法。不能完全解决为什么它在这种情况下不起作用,但我在保存 PDF 时短暂取消共享 VBA 中的工作簿,然后立即重新启用共享。

    不理想,不确定如果其他人在那个准确的时间打开它是否会引起任何问题,但它可以满足我的需求(因为我们只有少数人使用它,而且我们都在每个人的喊叫距离之内其他)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多