【发布时间】: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()})
但我知道不是这样。那么如何在我的宏中访问这个值。谷歌不是很有帮助。
【问题讨论】:
-
请出示您的代码好吗?
-
是的,我现在正在编辑问题。