如果我已经设置了所需的打印区域,如何仅打印包含非" "公式结果的页面?



作为库存控制专家,我设置了一个宏和一些公式来粘贴和挖掘从 IBM Power 9 库存箱位置数据库复制的数据。 最终目标是创建一个包含所有库位的硬拷贝阵列,其中包含条形码和审计笔记空间。结果工作表已经设置了所需的公式和格式,并划分为所需的打印区域,因此运行宏只是使用多达 2000 个箱位的名称和条形码填充它。

一切都像魅力一样工作,但目前我需要使用打印预览并手动设置要打印的活动工作表的范围,因为并非所有跨越包含格式和公式的活动单元格的 48 页都用于任何给定的垃圾箱组。

我已经搜索了多个站点几个小时,没有找到任何远程有用的代码,我自学的 VBA 技能仅限于简单的宏和对其他人代码的轻微修改。有没有办法对宏进行编程,使其仅打印具有值(非"-结果公式(的页面(由预定打印区域定义(,而忽略仅填充"-结果公式和格式的页面?我正在运行 Excel for Office 365。

谢谢

我的回答对于评论字段来说太长了,或多或少地回答了你的问题,所以我把它移到了这里。

我想象你的数据的方式,我会遍历工作簿中的每个页面。 在页面上,我会遍历每个公式,直到找到一个不空白的结果。 找到非空白结果后,我会将该页面添加到要打印的页面列表中并移动到下一页。检查最后一页后,我会打印列表上的每一页。

您可能希望定义完成项目所需的步骤(类似于我刚刚所做的(,因为每个步骤都需要多个动作,几乎每个动作对于具有您经验的人来说都是新的挑战。 定义后,找到对您的程序至关重要的最基本的动作并从那里开始。 保持简单,你不会总是知道挑战是什么或它来自哪里。 看起来像一个简单的步骤,比如在页面之间循环,需要对工作簿对象有基本的了解,这是一个比循环复杂得多的主题。

请记住,我们在这里解决您当前代码的问题。如果您对现有代码没有问题,那么除了为您指明路径之外,没有太多可以做的。

在查看了@ProfoundlyOblivious提供的链接后,我很快确定我缺乏按照建议使用 VBA 编写解决方案的技能。然而,试图解析所有这些信息让我的大脑陷入困境,我确实开发了一个非常简单和偷偷摸摸的解决方法,使用与简单的一行宏绑定的公式。 假设打印区域预定义的所有页面的宽度相同,并且假设至少有一个单元格将始终一致地填充到使用的页面上,则如果您遇到类似的问题,这些说明应该对您有用。

在第一页的空白行中输入以下简单的二进制 IF 公式:

=IF(A1<>"",1,0)

其中 A1 是第一页中的一个单元格,其中包含一个公式,如果使用该页面,该公式将保证始终返回值。(在我的例子中,导入的信息是从每个页面的左上角开始的列中导入的(。

选择包含公式的页面行(不是工作表的整行,只是打印区域定义的页面宽度(,并将填充拖到所有可能的页面上,然后在最后一页的同一行中,只需添加一个,,,,引用(添加(所有二进制 IF(X,1,0( 公式。结果总和将是填充的页数。

笨重,但功能齐全。

最后,简单的打印宏:

Sub Print_Audit_Sheets()
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=Range("JW42").Value, Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

其中 ("JW42"( 是对所有二进制 IF(( 公式的 SUM(( 范围的引用。它并不花哨,但它很简单,而且工作简单。请务必更改 IF(( 二进制和 Sum(( 单元格上的文本颜色,以便打印输出中不会出现随机的 1 和 0。

如果第一个页面的填充不一致或包含值的页面不连续,则需要修改此代码。

最新更新