【发布时间】:2017-01-28 15:43:57
【问题描述】:
我有一个带有页面(表 3)的电子表格,我想将其导出为 PDF(使用宏导出 pdf)。
目前,这链接到另一个工作表,用户可以在其中输入日期范围以从更大的工作表中提取相关数据。这使用以下数组公式填充工作表 3 上的数据:
=IFERROR(INDEX(Sheet1!$V$3:$W$5998,SMALL(IF((Sheet1!$C$3:$C$5998>=Crynodeb!$D$3)*(Sheet1!$C$3:$C$5998<=Crynodeb!$F$3)*(Sheet1!$V$3:$V$5998<>""),ROW(Sheet1!$V$3:$W$5998)-2),ROW(18:18)),1),"")
Sheet 3 上的数组公式已应用于大约 6000 行数据。因此有可能返回 6000 行数据。但是,根据用户输入的条件,可能只会返回 5 行数据。
除此之外,我还对 6000 行应用了单元格格式,以便在数据行之间有一条便于打印的行。
但是,由于这已应用于 6000 行数据,因此可能会导出 61 个左右的页面,而实际上只显示一个页面的数据。
是否有一种简单的方法可以继续在大范围内应用数组公式,同时将打印功能限制为仅适用于包含从数组公式返回的数据的页面?
我也在使用 Format > AutoFit Row Height 功能根据返回项目的长度调整行高,但目前我认为我必须手动执行此操作我返回数据的时间。有没有办法自动应用它来调整页面内容?
非常感谢
【问题讨论】:
-
Excel 中的打印区域是静态的。因此,没有简单的方法可以摆脱这种情况。您可以只编写一个 VBA 宏来确定实际包含数据的范围,然后在打印前将打印区域设置为该
static区域。但如果没有 VBA,您就无法让它看起来“动态”。 -
谢谢拉尔夫,感觉这不是一件容易的事。不过,vba 绝望了,不知道从哪里开始……有人能建议一种方法吗?
-
您可能需要确保在有人打印之前设置了
PrintArea。因此,您可能想要使用Workbook_BeforePrint。如果您正在寻找相关的 VBA 代码,您只需进行搜索。网络,尤其是 StackOverflow 充满了例子:stackoverflow.com/search?q=%5Bexcel-vba%5D+printarea -
跑题了,但是你有速度问题吗?当运行一个只有绝对固定引用的重复数组公式时,我会将常量数组结果放入一个命名范围:
IF((Sheet1!$C$3:$C$5998>=Crynodeb!$D$3)*(Sheet1!$C$3:$C$5998<=Crynodeb!$F$3)*(Sheet1!$V$3:$V$5998<>""),ROW(Sheet1!$V$3:$W$5998)-2),然后使用包装器 SMALL 函数等引用该命名范围。 -
有时会有点卡顿,但没有问题。不过,我对此感到疑惑,谢谢 - 将考虑实施它。
标签: arrays excel excel-formula vba