Excel vba打开文件夹中的所有word文档并通过从用户获取份数进行打印

时间:2015-01-03 19:15:09

标签: vba excel-vba word-vba excel

我是Macro的新手

通过谷歌搜索我编码了这个,我已经改变了一些部分供我使用。 问题是运行时错误即将到来。而且我不知道如何在.doc和.docx文件夹中打印所有word文档

我的要求

  1. 想要打印文件夹A中的所有word文档(.doc和.docx)。
  2. 打印活动文档(希望从用户获取的份数)。
  3. 关闭活动文档。
  4. 对文件夹A中的所有文档重复2和3
  5. 我的代码将从用户选择的案例中获取要打印的页码

    案例1将逐一打印前两页。 案例2将打印第3个以重置页面。 案例3将打印完整文档。

    在我的办公室中,双面打印是默认的打印机设置。但我会使用信头。我需要这个宏来解决我的问题。我尝试使用单面宏代码进行打印但不起作用。

    Sub prnt()
    
    Dim c As Integer
    Dim i As Integer
    Dim strName As String
    
    'get print type
    strName = InputBox(Prompt:="Choose Your Option" & vbNewLine & "" & vbNewLine & "1. Letter Head" & vbNewLine & "2. A4 Sheet" & vbNewLine & "3. Comp Plan" & vbNewLine & "", _
              Title:="ENTER YOUR PRINT TYPE", Default:="Your Choice here")
    
        If strName = "Your Choice here" Or strName = vbNullString Then
            MsgBox "Sorry...! Choose Correct option"
            Exit Sub
        Else
            'case to choose option
            Select Case strName
    
                Case "1"
    
                    Dim file
                    Dim path As String
                    Dim ans As String
    
                    'get number of copies from user
                    c = InputBox("Please enter number of copies")
                    ans = MsgBox("Are you sure you want to print " & _
                        c & "?", _
                        vbQuestion + vbYesNo, "Print pages")
    
                    If ans = vbNo Then
                        Exit Sub
                    Else
                        'path to the folder
                        path = "E:\print\"
                        file = Dir(path & "*.docx")
                        Do While file  ""
                            Documents.Open Filename:=path & file
                            For i = 1 To 2  'loop 2 pages
                                ActiveDocument.PrintOut , Copies:=c, Range:=wdPrintRangeOfPages, Pages:=i
                            Next 
                            ActiveDocument.Close
                            ' set file to next in Dir
                            file = Dir()
                        Loop 
                    End If
    
                Case "2"
                Case "3"
                Case Else
                    MsgBox "Sorry...! Choose Correct option"
    
            End Select
    
        End If
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

编写字符串而不是数字的编程习惯不好。

见:

Sub Test()
Dim noofcopies As Integer

noofcopies = GetNumberOfCopies()

MsgBox noofcopies

End Sub


Function GetNumberOfCopies() As Integer
Dim iRetVal As Integer

On Error GoTo Err_GetNumberOfCopies

iRetVal = CInt(InputBox("Enter no. of copies to print" & vbCr & vbCr & _
                "Enter proper integer value between 1 and 3" & vbCr & _
                "0 (zero) equals to Cancel", "No. of copies", "1"))

If iRetVal > 3 Then iRetVal = 3

Exit_GetNumberOfCopies:
    GetNumberOfCopies = iRetVal
    Exit Function

Err_GetNumberOfCopies:
    Err.Clear
    Resume 0

End Function

使用相同的逻辑来获取打印选项;)