使用MAC,使用Excel中的宏打印Word文档

时间:2016-10-05 10:01:25

标签: vba printing ms-word excel-vba-mac word-vba-mac

我正在使用MAC而我正在尝试创建一个将从Excel工作表中打印Word文档的宏。用户无需查看word文档,只需打印即可。

在查看了本论坛中回答的一些问题之后,我设法编写了一些在我家PC上运行的代码。

但是,我更改了文件路径和文件名,并将代码复制到我在工作中使用的MAC上,代码似乎不再起作用。我想知道使用MAC时代码是否必须不同?

我正在使用Microsoft Excel for Mac 2011,版本14.6.8。

ans = MsgBox(Prompt:="Document 1", Buttons:=vbYesNo, Title:="Print")
If ans = vbYes Then
    Dim objWord
    Dim objDoc
    Set objWord = CreateObject("Word.Application")
    'Enter filename and path here
    Set objDoc = objWord.Documents.Open("/Volumes/.../Document 1.docx")
    objWord.Visible = False
    objDoc.PrintOut
    objWord.Quit
End If

有时代码卡在CreateObject("Word.Application"),有时代码卡在我写入文件路径和文件名的地方。

我不完全确定我是否正确编写了文件路径。?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的文件是否在网络上?

在Word VBE中使用该代码在即时窗口中获取文件的路径:

Sub get_path()
   Debug.Print ActiveDocument.Path
End Sub

尝试此功能来测试文件是否存在(不确定如何在Mac上运行...):

Public Function File_Exist(sFilePath As String) As Boolean
    Dim sProv As String
    On Error GoTo ErrorHandler
        sProv = Dir(sFilePath, vbDirectory)

        File_Exist = (sProv <> "")
    On Error GoTo 0
    Exit Function

ErrorHandler:
    MsgBox Prompt:="Error on test file= " & sFilePath & vbCrLf & Err.Number & vbCrLf & Err.Description
End Function

您的代码有一些改进:

ans = MsgBox(Prompt:="Document 1", Buttons:=vbYesNo, Title:="Print")
If ans = vbYes Then
    Dim objWord As Object
    Dim objDoc As Object
    Dim sFilePath As String
    ''If the file is a network, you should start the path with //
    sFilePath = "New_path_from_Word_immediate_window"

    On Error Resume Next
    Set objWord = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
        Set objWord = CreateObject("Word.Application")
    End If
    On Error GoTo 0


    objWord.Visible = False
    'Enter filename and path here
    'If File_Exist(sFilePath) Then
        Set objDoc = objWord.Documents.Open(sFilePath)
        objDoc.PrintOut
        objDoc.Close
    'Else
        'MsgBox "File doesn't exist!" & vbCrLf & sFilePath, vbCritical + vbOKOnly
    'End If

    objWord.Quit
End If