在一个打印作业Excel VBA中选择并打印多个工作表

时间:2014-04-18 14:53:08

标签: excel vba excel-vba excel-2010

我继承了这种可怕性,并被要求进行更新。

目前,这个工作簿是使用一个包含一堆复选框的工作表构建的,所有复选框都与工作簿中的其他工作表相关联。用户选择复选框,然后单击按钮以打印与选中的每个复选框关联的工作表。

它现在的构建方式,为每个选定的工作表运行打印作业。我被要求为所有选择的纸张运行一个打印作业(以避免有一百张封面纸)。

我编写了一个VBA函数,它生成一个字符串,其中包含选中复选框的每个工作表的名称,用引号,逗号分隔。

我需要找出一种方法来使用这些信息来选择所有的纸张,然后在选择我需要的每张纸张后再打印。

甚至地狱,我还能把这个字符串吐回到最初为打印能力编写的宏中。现在宏是工作簿中的另一个工作表,有102个不同的打印命令,由一堆if语句控制。因此,我要将字符串吐入该表中,这样我就可以运行一个打印命令。

无论哪种方式,有人请帮助。

这是我的代码:

Public Function sheetString()
    Dim c As Integer
    Dim r As Integer
    Dim sConcat As String

    Dim ws As Worksheet

    For c = 2 To 6 Step 2
        For r = 1 To 46
            If Sheet94.Cells(r, c) = True Then
               sConcat = sConcat & Sheet94.Cells(r, c - 1) & ", "
            End If
        Next r
    Next c

    sConcat = Left(sConcat, Len(sConcat) - 2)

    Debug.Print sConcat
End Function

代码的输出是这样的(具有不同的名称取决于检查哪些框):

  

" PR015"," PR018"," PR019"," PR026"," PR029A"

编辑:感谢simoco,我到目前为止比我更接近。这是现在的代码。

Public Function sheetString()
    Dim c As Integer
    Dim r As Integer
    Dim sConcat As String
    Dim ws As Worksheet

    Set ws = Sheet94

    For c = 2 To 6 Step 2
        For r = 1 To 46
            If ws.Cells(r, c) = True Then
               sConcat = sConcat & ws.Cells(r, c - 1) & ","
            End If
        Next r
    Next c
    sConcat = Left(sConcat, Len(sConcat) - 1)
    Debug.Print sConcat
    sheetString = sConcat
End Function

Sub test()
    'if cells with sheet names contains quotes
    'Sheets(Split(Replace(sheetString, """", ""), ",")).Select
    'if cells with sheet names doesn't contain quotes
    Sheets(Split(sheetString, ",")).Select
    ActiveSheet.PrintOut Copies:=1
End Sub

它在没有轰炸的情况下运行,但现在它只选择了第一张选中它的盒子。

2 个答案:

答案 0 :(得分:1)

这是稍微修改过的函数sheetString

Public Function sheetString()
    Dim c As Integer, r As Integer
    Dim sConcat As String
    Dim ws As Worksheet

    Set ws = Sheet94

    For c = 2 To 6 Step 2
        For r = 1 To 46
            If ws.Cells(r, c) Then
               sConcat = sConcat & ws.Cells(r, c - 1) & ","
            End If
        Next r
    Next c

    sConcat = Left(sConcat, Len(sConcat) - 1)

    Debug.Print sConcat
    sheetString = sConcat
End Function

然后调用就像这样:

Sub test()
    'if cells with sheet names contains quotes
    'Sheets(Split(Replace(sheetString, """", ""), ",")).PrintOut Copies:=1
    'if cells with sheet names doesn't contain quotes
    Sheets(Split(sheetString, ",")).PrintOut Copies:=1
End Sub

答案 1 :(得分:-1)

Sub Macro1()
 Application.Dialogs(xlDialogPrint).Show
End Sub
Sub Macro()
  Worksheets.PrintOut
End Sub

使用此代码打印xl中的所有工作表。同时选择您的具体pri