循环目录,打开工作簿,打印选定的工作表

时间:2015-05-20 10:52:39

标签: excel vba excel-vba excel-2013

我有大约50个有3个工作表的工作簿,我需要打印第2个工作表。工作表的名称将是不变的,所以这不应该太难。

我在VBA中写了以下内容并没有出错,但我的打印机没有打印任何内容。我错过了什么?

Sub Loop2()
    Dim StrFile As String
    Dim WSCount As Integer
    Dim sh As Worksheet

    StrFile = Dir("c:\temp\*.xls*")
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir

        For Each sh In ActiveWorkbook.Worksheets

           If (sh.Name <> "Credits") Then

               sh.PrintOut

           End If
        Next sh
    Loop
End Sub

如果我使用MsgBox作为脚手架,我会获取文件及其工作表,但不会打印。

1 个答案:

答案 0 :(得分:1)

我看到两个问题

  1. 你在哪里打开工作簿?
  2. 您需要在StrFile = Dir之前移动Loop。使用此命令,您可以告诉它查找下一个文件。
  3. 试试这个( UNTESTED

    Sub Loop2()
        Dim StrFile As String
        Dim WSCount As Integer
        Dim sh As Worksheet
        Dim wb As Workbook
    
        StrFile = Dir("c:\temp\*.xls*")
    
        Do While Len(StrFile) > 0
            Set wb = Workbooks.Open("c:\temp\" & StrFile)
    
            For Each sh In wb.Worksheets
                If (sh.Name <> "Credits") Then
                    sh.PrintOut
                    DoEvents
                End If
            Next sh
    
            wb.Close (False)
            StrFile = Dir
        Loop
    End Sub
    

    如果您想要打印问题中提到的前2张,请执行此操作。这不会检查工作表的名称

    Sub Loop2()
        Dim StrFile As String
        Dim WSCount As Integer
        Dim wb As Workbook
    
        StrFile = Dir("c:\temp\*.xls*")
    
        Do While Len(StrFile) > 0
            Set wb = Workbooks.Open("c:\temp\" & StrFile)
    
            wb.Sheets(1).PrintOut
            DoEvents
            wb.Sheets(2).PrintOut
    
            wb.Close (False)
            StrFile = Dir
        Loop
    End Sub