在Excel中利用VBA动态绘制交互式函数平面曲线
马致明;叶尔肯·加伦木汉;赵晴;阿卜杜热伊木·图尔荪
【摘 要】在剖析Excel VBA编程方法的基础上,提出了将工作表设置成坐标纸,利用其数据源和VBA编程手段并采用描点法动态绘制交互式函数平面曲线的方法,为丰富数学、物理、电子等诸多跟绘图有关课程的教学手段提供了一种新的途径,文章就有关方法及技术做了详细介绍,并给出了可绘制任何函数平面曲线的Excel VBA源代码.
【期刊名称】《新疆师范大学学报(自然科学版)》
【年(卷),期】2017(036)002
【总页数】6页(P40-45)
【关键词】ExcelVBA;坐标纸;描点法;函数平面曲线;动态绘制
【作 者】马致明;叶尔肯·加伦木汉;赵晴;阿卜杜热伊木·图尔荪
【作者单位】新疆师范大学 计算机科学技术学院,新疆 乌鲁木齐 830054;新疆阿勒泰广播电视大学,新疆 阿勒泰 836500;新疆师范大学 计算机科学技术学院,新疆 乌鲁木齐 830054;新疆师范大学 计算机科学技术学院,新疆 乌鲁木齐 830054
【正文语种】中 文
【中图分类】TP311.1
函数平面曲线的绘制在数学、物理、电子、通讯等相关专业的教学中应用极广。虽然可以利用一些专业绘图软件绘制函数平面曲线,但是其交互性和灵活性并不能满足教师在课堂教学中的实际需要。广大教师在课堂绘图时使用比较多的是Microsoft Excel,其强大的图表功能可以将工作表中的相关数据绘制成对应的函数平面曲线。但是,如果想动态呈现函数平面曲线的详细绘制过程、并且能回查曲线上任意一点的坐标值,Excel的图表功能又显得无能为力。这些因素致使许多教师在制作人机交互式函数曲线时不得不选择最原始的手工描点绘图法,或者直接用静态图片的呈现来替代动态的绘图过程。
笔者经过探索到了在Excel中利用VBA动态绘制交互式函数平面曲线的有效途径,既解决
了任意函数平面曲线的动态绘制问题,还实现了用交互方式实时控制绘图的速度、曲线上任意一点坐标值的动态跟随和回查、不同函数曲线的比较等功能。这种独创的方法巧妙地将编程语言的灵活性和Excel的优点有机地结合起来,所开发出的Excel VBA程序能绘制出任何一种平面函数曲线,不仅简单实用,而且特鲜明,非常适合在课堂教学或相关研究中使用,现就有关制作方法及关键技术介绍如下,希望能对各位同仁有所启发。
1.1 VBA概述
在Microsoft office家族中集成了一种对office进行二次开发的语言:Visual Basic for Application,简称为VBA。VBA是Microsoft所开发的“Visual Basic程序设计语言”(简称为VB)的一个子集,它继承了VB程序设计语言的绝大多数功能,并支持对office对象的操作。利用VBA使用者可以在office中添加命令按钮、文本框、复选框、选项按钮等控件作为用户接口元素,通过这些控件office文档可以得到用户的请求,并根据需求对其做出相应的响应[1]。在Excel中适当地使用VBA编程手段,可以充分利用其数据库功能和表格功能,大大加强其数据处理能力和图表绘制能力,同时在教学中也可以制作出交互性很强的动态演示画面,为丰富多媒体教学的演示效果开辟新的广阔的空间[2]。
1.2 VBA宏编程的方法
与VB类似VBA也是采用事件驱动、面向对象的编程机制,宏代码的编制也是从对象的定义开始的;所不同的是Excel中除工作表Worksheet对象外其它对象均未定义事件,无法驱动宏代码。因此,除了Worksheet对象外可以产生宏驱动事件的对象只限于VBA所支持的命令按钮、选项按钮、复选框、文本框、图片框等通用控件对象,这些对象均包含在“控件工具箱”工具栏。打开“控件工具箱”后可以在工作表中添加所需的各种控件对象,打开“属性”窗口后就可以设置对象的属性,打开VBA集成开发环境(双击对象即可)后就可以编写宏代码,其操作与VB基本相同[3];如果交互式界面中需要窗体,还可以从集成开发环境中插入“用户窗体”。
2.1 基本思想
用Excel创建的工作簿类似于一个数据库文件,其中的工作表Sheet实际上就是一个二维关系表Table,各个表之间具有关联性。借助“控件工具箱”可以在工作表中添加命令按钮等用户接口控件,通过这些控件可为程序提供控制手段,利用工作表中的数据作为实时参数,以单元格作为像素点,采用“描点法”(实际上就是改变相应单元格的背景颜)和延时技术
就可动态绘制函数平面曲线。
2.2 具体做法
在宏代码中将其中的一个工作表(以下称为绘图工作表)的行高和列宽调整到极其细小以作为绘图平面,使其变成类似于实验室中使用的绘图坐标纸;通过“单元格格式”对话框中的“对齐”选项,将“文本控制”设置成“缩小字体填充”,以便在细小的单元格中填写的坐标值只能在编辑栏中查看,同时也使绘图区域尽可能简洁美观;利用另一个工作表(以下称为数据工作表)中的函数坐标值(各个点的坐标值可以直接输入,也可以利用Excel本身提供的“复制函数”、“填充”等功能得到)直接在绘图工作表上定位单元格,通过改变单元格背景颜的方法进行“描点”,并依据数据工作表中提供的速度控制参数来控制“描点”的速度,这样就可以在绘图工作表中动态呈现整个图形的绘制过程。“描点”的同时在单元格中填写坐标值,这样在Excel的“编辑栏”中就有动态变换的坐标值,图形绘出后也可通过单击单元格来查看图形中的任意一点的坐标值。
因为Excel工作表的特殊性及工具箱中提供的控件数量有限,在动态绘制交互式函数平面曲线时有两个问题。
3.1 如何将各类函数曲线控制在有限的坐标纸范围内
尽管Excel中的一个工作表有65536行,但列数只有256列。为了能在屏幕范围内展现曲线的完整结构,尽可能充分利用屏幕空间,并适应主流显示器16:10的模式,可将绘图工作表(坐标纸)的绘图区域限定在256列、160行的平面内。
在绘图前先统计出绘图点数n(即坐标对数),并将每一点对应的坐标值读入x、y两个数组,并将最大值和最小值保存在Xmax、Xmin、Ymax和Ymin四个变量中。绘图时,X轴的最小值定位在1列,最大值定位在256列,根据直线的两点式方程,横坐标为x(i)的任意一点对应的列号为:Px=255*(x(i)-Xmin)/(Xmax-Xmin)+1;因行号的增大方向与Y轴相反,故Y轴的最大值定位在1行,最小值定位在160行,同理,纵坐标为y(i)的任意一点对应的行号为:Py=159*(y(i)-Ymax)/(Ymin-Ymax)+1。这样坐标点(x(i),y(i))对应的是工作表中的Py行Px列这一单元格,不管函数形式如何变化,也不管坐标值的取值范围如何,总能将函数曲线缩放到256列、160行这一有效的绘图区域内。
vba编程技巧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。