宏可根据复选框选择多个工作表

时间:2014-04-17 16:33:08

标签: excel excel-vba printing vba

我需要一个宏,它将根据复选框选择我的文档的不同表格。它用于打印目的。我有一个复选框列表,以及一个打印每张工作表的功能。

我当前的宏基本上是这样的:

如果检查(第1页的复选框),则检查 选择第一张,然后 打印选定的表格

如果(选中表2的复选框),则检查 选择第二张,然后 打印选定的表格

等...

它通过大约100张这样运行。因此它运行100个单独的打印作业。在我的工作中,您将获得每份工作的封面页。这就是100张封面。

我想让我的宏只是在检查复选框时将工作簿添加到WORKBOOK.SELECT函数,然后使用所有这些选项运行打印功能一次。有什么帮助吗?

PS-如果某人有可以在VBA中完成的解决方案,我也会对此持开放态度。

PPS-有人要求查看代码。我是堆叠交换的新手,所以这可能很难看......

以下是它的工作原理: 每个复选框都有一个名为' prt_res'与之相关联。选中PR001框,并将与PR001关联的prt_res复选框设置为TRUE。此宏运行并查找所有TRUE:

Mprtsel
=IF(prt_res!B1=TRUE,GOTO(DF3),GOTO(DF5))
=WORKBOOK.SELECT("PR001","PR001")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B2=TRUE,GOTO(DF6),GOTO(DF8))
=WORKBOOK.SELECT("PR002","PR002")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B3=TRUE,GOTO(DF9),GOTO(DF11))
=WORKBOOK.SELECT("PR003","PR003")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B4=TRUE,GOTO(DF12),GOTO(DF14))
=WORKBOOK.SELECT("PR003A","PR003A")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B5=TRUE,GOTO(DF15),GOTO(DF17))
=WORKBOOK.SELECT("PR004","PR004")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B6=TRUE,GOTO(DF18),GOTO(DF20))
=WORKBOOK.SELECT("PR004A","PR004A")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)
=IF(prt_res!B7=TRUE,GOTO(DF21),GOTO(DF23))
=WORKBOOK.SELECT("PR005","PR005")
=PRINT(1,,,1,FALSE,FALSE,1,,,600,600)

大约100种不同的纸张就像这样运行。

PPPS-而且,我知道这是一个糟糕的设置。我没有写这个。我刚刚继承了它。

编辑:

好!我写了一个小VBA函数来完成我需要它做的事情,并给了一个很好的小变量,其中包含我需要插入到workbook.select函数中的值。就是这样:

Public Function sConcat() As Variant
    Dim c As Integer
    Dim r As Integer

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

此功能的输出是所选工作表名称的列表,以逗号分隔。喜欢这个

" PR001"" PR003"" PR301"

现在我不知道如何将这个值放到我的excel宏中。我想的可能是:

WORKBOOK.SELECT({sConcat()})

但我知道那不是。那么如何在我的宏中访问此值。谷歌并不是非常有帮助。

1 个答案:

答案 0 :(得分:0)

在选择要打印的所有工作表后,你可以这样做吗?

 ActiveWindow.SelectedSheets.PrintOut Copies:=1