分享

Excel中图片的智能刷新

 WQHTSG5839 2013-08-26
    在Excel工作表中,通过VBA可以很容易地实现当某些单元格内容发生变更时,相关图片也进行同步变更的效果。但实际工作中,VBA程序的运行常常会受到各种原因限制而不能达到预期目的,况且并不是人人都能熟练运用VBA。那么,如果不借助于VBA的话,是否就不可能办到呢?

   我们来看这样一个实例:这是一个利用Excel制作的“万年历”,功能是查询任一年的公历、农历、节气、节日、生肖等。在使用过程中,当使用者指定查询日期为1月份时,它能够显示1月份的日历,并配有当前月份插图及当前年份生肖图。当查询日期为2月份时,它显示2月份的日历并自动刷新月历插图,同时,由于正好跨了一个阴历年,工作表还一并刷新了生肖图片,由“蛇”变为“马”。

     这个“万年历”的制作过程没有使用任何VBA程序,那么,它是如何实现动态刷新图片这一神奇的效果的呢?

   自从Excel 5.0 开始,Excel在原有“窗体”控件之外新增了 ActiveX 控件。实际使用中,当我们往工作表中添加某个ActiveX 控件时,比如 “CommandButton” 控件,很少人会在意“编辑栏”发生的变化,(如果您的工作表视图中没有“控件工具箱”,请右击工具栏,选择“控件工具箱”)

   在工作表中新建一个按钮控件以后,“编辑栏”中显示为“=EMBED("Forms.CommandButton.1","")”,这是该嵌入对象的表达式。这个表达式就是关键所在。如果我们在A1单元格里存入一张图片,再将表达式改写为“=A1”会怎样呢?结果这个CommandButton控件获得了“A1”单元格的“视”(视:即view,其定义为用户和文档之间可资完成全部输入、选择及文档编辑的中介物。文档管理着数据,但由视来显示它的部分或全部并反馈信息。此处“视”作类比)。

      由此我们可以知道,假如预先向某些单元格中存入图片,那么,当我们改变这个CommandButton控件所指向的单元格地址后,就能使之“看”到不同的被指向单元格所显示的内容。这样,就可以有规则地实现图片内容的“刷新”了。

   掌握了上面这个技术特点以后,我们只需要实现能动态变更目标单元格地址即可。下面仍以“万年历”来举例说明该方案的具体实现方法。在这个例子里,我们要实现的是当月份发生变更时,显示不同的月历插图。

   设计好“万年历”工作表后,将一空白工作表命名为“月历图”,在该工作表的A1-A12单元格中分别预置12张图片,图片预先调整为实际要显示的大小,并取消网格线(网格线也是该单元格“视”的一部分,如果需要显示的话可以一并保留),以备12个月份使用

    然后回到工作表“万年历”,将用于输入查询月份的单元格命名为“月份”,该单元格中的数值将作为指向工作表“月历图”中不同图片的指针。命名的目的是为了增加函数的可读性。在工作表“万年历”中插入一CommandButton控件,将其表达式写为“=月历插图”,虽然当前的变量“月历插图”尚未定义,不过没关系,这可以通过插入名称来进行内部定义:点击“插入->名称->定义”,这时弹出“定义名称对话框”,在“在当前工作薄中的名称”中键入“月历插图”,令“引用位置 =OFFSET(月历图!$A$1,月份-1,0)”,点击“添加”“关闭”完成操作。

   这里用到了OFFSET() 函数,该函数的语法简述如下:

   OFFSET(起始单元格,下偏移行数,右偏移列数),起始单元格自身偏移量为零,偏移数值为负数时则向相反方向移动。

   文中公式“=OFFSET(月历图!$A$1,月份-1,0)”的意思是告诉CommandButton控件,从工作表“月历图”的A1单元格开始,根据不同的月份向下移动月份-1个单元格,并将该单元格的内容显示出来。    

   随着“月份”的变更,这个CommandButton控件将指向不同的图片,这也就完成了Excel 工作表中图片的智能刷新。

   上述方法对于利用Excel工作表来处理配有图片的人事档案、产品及零备件库存等资料,可以实现同步调用相关图片并显示于指定位置,达到图文并茂的效果。其它方面的应用,读者可以自行发挥。

   在工作表中新建一个按钮控件以后,“编辑栏”中显示为“=EMBED("Forms.CommandButton.1","")”,这是该嵌入对象的表达式。这个表达式就是关键所在。如果我们在A1单元格里存入一张图片,再将表达式改写为“=A1”会怎样呢?结果这个CommandButton控件获得了“A1”单元格的“视”(视:即view,其定义为用户和文档之间可资完成全部输入、选择及文档编辑的中介物。文档管理着数据,但由视来显示它的部分或全部并反馈信息。此处“视”作类比)。

   由此我们可以知道,假如预先向某些单元格中存入图片,那么,当我们改变这个CommandButton控件所指向的单元格地址后,就能使之“看”到不同的被指向单元格所显示的内容。这样,就可以有规则地实现图片内容的“刷新”了。

   掌握了上面这个技术特点以后,我们只需要实现能动态变更目标单元格地址即可。下面仍以“万年历”来举例说明该方案的具体实现方法。在这个例子里,我们要实现的是当月份发生变更时,显示不同的月历插图。

   设计好“万年历”工作表后,将一空白工作表命名为“月历图”,在该工作表的A1-A12单元格中分别预置12张图片,图片预先调整为实际要显示的大小,并取消网格线(网格线也是该单元格“视”的一部分,如果需要显示的话可以一并保留),以备12个月份使用   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多