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

Excel vba open all word document in a folder and print by getting number of copies from user

我是宏的新手

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

我的要求

  1. 想要打印文件夹 A 中的所有 word 文档(.doc 和 .docx)。
  2. 打印活动文档(要从用户那里获取的份数)。
  3. 关闭活动文档。
  4. 对文件夹 A 中的所有文档重复 2 和 3

我的代码将从用户选择的案例中获取要打印的页码

案例 1 将一页一页地打印第 1 和第 2 页。 情况 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

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

看到这个:

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

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