我的文件里面有 50 张表,每张都是一个标准表格。我们将其命名为 Form1、Form2、Form3。
我想创建一个打印表,从中选择我想查看的表格,这样我就不需要在各个表之间导航来找到想要的表格。我还想在这个打印表中设置计数器,每次我发送到打印机时它都会计数。
到目前为止我做了什么?我创建了这个公式,其中 M1 是一个带有表单名称的下拉列表。因此,如果我想查看 Form2,我会在下拉列表中选择 Form2,然后公式会显示所有 Form2 工作表。
=IF($M$1="Form1";IF('Form1'!A1="";"";'Form1'!A1);"")&IF($M$1="Form2";IF('Form2'!A1="";"";'Form2'!A1);"")&IF($M$1="Form3";IF('Form3'!A1="";"";'Form3'!A1);"")
一切运行良好,因为所有形式都是标准化的。
选择所选表格后,我需要插入我公司的 ID 号,然后打印。
我想知道是否可以在此工作表中创建一个计数器,计算我打印的次数...或者在我保存或更改任何内容时按时间顺序计数的任何东西......
答案1
您的所有请求都可以满足。但恐怕只能使用 VBA。
保留下拉菜单但也添加一个触发宏的按钮。
在宏中,读取带有下拉菜单的单元格并发送相应的工作表进行打印。然后更新相应的计数器,该计数器可以位于与下拉菜单和按钮位于同一页上的一组单元格中。
要计算保存次数,您需要一个 before_save 函数的宏。您需要搜索它,我认为我的博客上甚至可能有一篇关于它的文章,不记得了,我已经好几年没做过了。原理与上一个宏相同,您只需将 1 添加到相应的单元格即可。
答案2
构建“打印表”以显示其他 50 张表之一的内容的一种更简洁的方法是将单元格设置A1
为
=INDIRECT($M$1 & "!A1")
它会构建一个文本字符串,该字符串看起来像您想要查看的单元格的限定名称,然后使用该INDIRECT()
函数取消引用该字符串(即,将其视为单元格地址并检索已识别单元格的内容)。这样,您在添加时就无需更改公式Form51
。警告:
- 这可能会导致 Excel 在以下情况下做大量工作(即花费大量时间)“重新计算”这些间接单元格:任何事物变化(不仅仅是
M1
)。我不确定它是否会比你现在的情况更糟糕。 - 当您想要更新时,请务必避免更改数据或在“打印表”中输入新数据的诱惑
Form42
。(当然,您现在有这个问题。)您可以通过保护打印表来保护自己免受此类事故的侵害。
还有其他方法可以构造打印表;例如,使用 VBA
- 创建一个用户定义的函数来代替
INDIRECT()
调用,但运行起来更顺畅,或者 - 实际上,当您更改时,会将所有数据复制到打印表中。
Formnn
M1
您可以通过编写 VBA 例程来计算变化Worksheet_Change
。
我不知道表格逻辑如何能够计数/检测打印时间。不过,您可能能够通过用 VBA 编写打印例程来实现所需的效果。
PrintOut , , , True
语句将为您打印工作表;添加您想要的任何其他操作(例如,增加计数器)。(您只需记住打印使用此宏)第四个参数PrintOut
是预览,设置为True
让 Microsoft Excel 在打印工作表之前调用打印预览(从而为您提供取消的选项)或False
(或省略)立即、无条件打印工作表。
看如何在 MS Office 中添加 VBA? 了解相关信息。