【问题标题】:How to make Excel VBA Export as PDF on MAC computer如何在 MAC 电脑上将 Excel VBA 导出为 PDF
【发布时间】:2019-06-11 21:56:58
【问题描述】:

我的 Excel 文档有一个宏代码。我想将活动工作表作为 PDF 文件导出到特定文件夹。相同的代码在我的 Windows PC 上工作,但在我的 MAC 电脑上不起作用。当我单击保存按钮时,它正在打印 pdf 而不是保存它。我想保存它。如果有人可以帮助我,我会很高兴。

Sub Save_NEWPORT_ESTIMATE()

If Range("G1") = "INVOICE" Then

LigneIS = Application.CountA(Sheets("Invoice summary").Range("A:A"))
Sheets("Invoice summary").Range("A" & LigneIS + 1) = Now
Sheets("Invoice summary").Range("B" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("H8")
Sheets("Invoice summary").Range("C" & LigneIS + 1) = "NANTUCKET"
Sheets("Invoice summary").Range("D" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("A12")
Sheets("Invoice summary").Range("E" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("M49")

Else
    LigneIS = Application.CountA(Sheets("Invoice summary").Range("A:A"))
    Sheets("Estimate summary").Range("A" & LigneIS + 1) = Now
    Sheets("Estimate summary").Range("B" & LigneIS + 1) = 
    Sheets("NANTUCKET ESTIMATE").Range("H8")
    Sheets("Estimate summary").Range("C" & LigneIS + 1) = "NANTUCKET"
    Sheets("Estimate summary").Range("D" & LigneIS + 1) = 
    Sheets("NANTUCKET ESTIMATE").Range("A12")
    Sheets("Estimate summary").Range("E" & LigneIS + 1) = 
    Sheets("NANTUCKET ESTIMATE").Range("M49")

End If
    D1 = Format(Date, "ddmmyy")
    Customer = Left(Range("A12"), 6)
    Job = Range("G12")
    Tipe = Range("G1")
    Model = Range("G18")

If Tipe = "INVOICE" Then
Tipe2 = "1 SALES INVOICES"
Else
Tipe2 = "1 ESTIMATES"
End If

Lien = "/Users/macbookpro/Desktop/INVOICE/" & Tipe2

ChDir "/Users/macbookpro/Desktop/INVOICE/" & Tipe2

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Lien & "\" & D1 & " " & Model & "_" & Customer & "_" & Job & "_" & Tipe & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

End Sub

Sub Save_NANTUCKET_ESTIMATE()

If Range("G1") = "INVOICE" Then
LigneIS = Application.CountA(Sheets("Invoice summary").Range("A:A"))
Sheets("Invoice summary").Range("A" & LigneIS + 1) = Now
Sheets("Invoice summary").Range("B" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("H8")
Sheets("Invoice summary").Range("C" & LigneIS + 1) = "NANTUCKET"
Sheets("Invoice summary").Range("D" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("A12")
Sheets("Invoice summary").Range("E" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("M49")
Else
LigneIS = Application.CountA(Sheets("Invoice summary").Range("A:A"))
Sheets("Estimate summary").Range("A" & LigneIS + 1) = Now
Sheets("Estimate summary").Range("B" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("H8")
Sheets("Estimate summary").Range("C" & LigneIS + 1) = "NANTUCKET"
Sheets("Estimate summary").Range("D" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("A12")
Sheets("Estimate summary").Range("E" & LigneIS + 1) = Sheets("NANTUCKET ESTIMATE").Range("M49")
End If

D1 = Format(Date, "ddmmyy")
Customer = Left(Range("A12"), 6)
Job = Range("G12")
Tipe = Range("G1")
Model = Range("G18")
If Tipe = "INVOICE" Then
Tipe2 = "1 SALES INVOICES"
Else
Tipe2 = "1 ESTIMATES"
End If

Lien = "/Users/macbookpro/Desktop/INVOICE/" & Tipe2

ChDir "/Users/macbookpro/Desktop/INVOICE/" & Tipe2

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Lien & "\" & D1 & " " & Model & "_" & Customer & "_" & Job & "_" & Tipe & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
End Sub

【问题讨论】:

  • 我收到运行时错误 什么运行时错误?错误信息是什么?它就在您面前的屏幕上,但我们无法从这里看到您的屏幕。您有有用的信息应该在您的帖子中。请edit 把它放在那里。谢谢。
  • 顺便说一句,问题很可能是 Mac 没有 C: 驱动器并且没有使用反斜杠作为路径分隔符。不要硬编码仅 Windows 的路径和文件名,因为该路径在非 Windows 机器上不起作用。
  • 谢谢Ken,我弄错了,当然我的mac上没有C:。我将此代码用于我的 Windows PC,它正在工作。上面的代码在我的 Mac 上无法正常工作。当我单击“保存”按钮时,它正在打印 pdf 而不是保存它。

标签: excel vba macos export-to-pdf


【解决方案1】:

我不确定这个请求是否仍然有效,但我找到了解决方案

http://www.rondebruin.nl/mac/mac005.htm

似乎导出到 PDF 参数在 Mac 上的反应与在 Windows PC 上的反应不同,您需要一种解决方法,将 PDF 保存到用户库文件夹中,特别是保存到 Office 库文件夹中。关键功能是这个

    Function CreateFolderinMacOffice2016(NameFolder As String) As String
    'Function to create folder if it not exists in the Microsoft Office Folder
    'Ron de Bruin : 1-Feb-2019
    Dim OfficeFolder As String
    Dim PathToFolder As String
    Dim TestStr As String

    OfficeFolder = MacScript("return POSIX path of (path to desktop folder) as string")
    OfficeFolder = Replace(OfficeFolder, "/Desktop", "") & _
        "Library/Group Containers/UBF8T346G9.Office/"

    PathToFolder = OfficeFolder & NameFolder

    On Error Resume Next
    TestStr = Dir(PathToFolder & "*", vbDirectory)
    On Error GoTo 0
    If TestStr = vbNullString Then
        MkDir PathToFolder
        'You can use this msgbox line for testing if you want
        'MsgBox "You find the new folder in this location :" & PathToFolder
    End If
    CreateFolderinMacOffice2016 = PathToFolder
End Function

使用该函数创建文件夹,并直接使用返回值作为文件路径即可。

所有学分均归功于 Ron de Bruin,我只是复制此内容以提供帮助。访问他的页面以获取更多示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 2017-04-03
    • 2020-09-19
    • 1970-01-01
    • 2022-06-11
    • 2016-08-04
    • 2020-06-27
    • 2021-04-22
    相关资源
    最近更新 更多