【问题标题】:Macro to select multiple sheets based on check boxes基于复选框选择多个工作表的宏
【发布时间】:2014-04-17 16:33:08
【问题描述】:

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

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

如果(表一的复选框)被选中,那么 选择第一张,然后 打印选定的工作表

如果(表二的复选框)被选中,那么 选择表二,然后 打印选定的工作表

等等……

这样运行大约 100 张。所以它运行 100 个单独的打印作业。在我的工作中,你会得到每份工作的封面。所以这是100张封面。

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

PS- 如果有人有可以在 VBA 中完成的解决方案,我也愿意接受。

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

下面是它的工作原理: 每个复选框在一个名为“prt_res”的工作表中都有一个与之关联的单元格。您选中 PR001 的复选框,并且与 PR001 复选框关联的 prt_res 中的单元格设置为 TRUE。 this 宏运行并查找所有 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()})

但我知道不是这样。那么如何在我的宏中访问这个值。谷歌不是很有帮助。

【问题讨论】:

  • 请出示您的代码好吗?
  • 是的,我现在正在编辑问题。

标签: excel printing vba


【解决方案1】:

在选择所有要打印的工作表后,您能做这样的事情吗?

 ActiveWindow.SelectedSheets.PrintOut Copies:=1

【讨论】:

  • 问题是我没有选择工作表。我正在检查与工作表关联的框。我需要弄清楚如何根据与每张工作表关联的复选框来选择工作表。
  • 这是一种非常混乱的做事方式。我建议您构建一个用户表单来显示复选框,然后循环检查选中的项目,选择它们,然后按照我讨论的方式进行打印。由于 Checkbox 和工作表名称之间似乎没有关联,因此如果不进行一些更改就很难做到这一点。也许从 like this 开始,为每个复选框创建一个带有工作表名称的代理值,然后从那里开始工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
相关资源
最近更新 更多