会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Excel技巧 > 编程 > 正文

Excel XP中图片的智能刷新

时间:2005-02-11 09:41 来源:Excel Home 作者:Rowen 阅读:

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

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

   图(1)

   

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

   (编者注:示范文“万年历”,可到Excel Home(http://www.excelhome.net下载使用及参考)

 

"images/win0201/image014.jpg" v:shapes="_x0000_i1027">

   (图三)

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

   (图四)

   

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

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

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

    文章录入:Kevin    责任编辑:Kevin 

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: