Excel vba 打开一个文件夹中的所有word文档,通过获取用户的份数进行打印
Excel vba open all word document in a folder and print by getting number of copies from user
我是宏的新手
通过谷歌搜索,我对此进行了编码,并更改了一些部分供我使用。
问题是运行时错误即将到来。而且我不知道如何打印 .doc 和 .docx 文件夹中的所有 word 文档
我的要求
- 想要打印文件夹 A 中的所有 word 文档(.doc 和 .docx)。
- 打印活动文档(要从用户那里获取的份数)。
- 关闭活动文档。
- 对文件夹 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
使用相同的逻辑获取打印选项 ;)
我是宏的新手
通过谷歌搜索,我对此进行了编码,并更改了一些部分供我使用。 问题是运行时错误即将到来。而且我不知道如何打印 .doc 和 .docx 文件夹中的所有 word 文档
我的要求
- 想要打印文件夹 A 中的所有 word 文档(.doc 和 .docx)。
- 打印活动文档(要从用户那里获取的份数)。
- 关闭活动文档。
- 对文件夹 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
使用相同的逻辑获取打印选项 ;)