用VBA实现图像文字随意拖
与其他一些演示平台如Authorware、Flash等相比,PowerPoint 2003在交互性方面还稍逊风骚,如作诸如图案创意、足球战术、围棋复盘等演示时,经常需要对幻灯片中的图片或文字即时即兴地调整位置以增加演示的生动性,而PPT 却无法直接实现,这个时候就需要借助强大的VBA代码了。
让PPT接受宏
PPT内置了VBA编辑器,利用它可以扩展PPT的功能。由于VBA代码特别是用VBA编制的宏病毒代码会对PPT的安全性构成威胁,因此在高安全等级下PPT 将拒绝执行VBA。
在确保VBA代码来源合法和运行无害的前提下,需要降低PPT的安全等级以使VBA代码得以执行。选择"工具→宏→安全性"菜单,将安全级别设为"低",同时将"可靠发行商"页下的"信任对于Visual Basic项目的访问"项勾选。
创建PPT
1.在PPT中新建空幻灯片。
2.选择"视图→工具栏→控件工具箱"菜单,打开控件工具箱。
3.点击控件工具栏的"标签"控件,在空幻灯片中拖出标签对象Label1。然后点击控件工具栏的"属性"按钮,打开属性栏,设置Label1的Caption、Font、ForeColor、BackStyle等属性。
4.点击"图像"控件,在幻灯片中添加图像对象Image1。在Image1的属性栏中,设置它的AutoSize、Picture属性,加入图片文件并让图像对象适应图片的大小。
添加代码
双击Label,或选择"工具→宏→Visual basic编辑器"菜单,打开VBA,选择Label1对象,再选择对应的MouseDown、MouseMove和MouseUp事件,加入以下代码:
Dim X1, X2, X3, X4, X5, X6 As Integer, Y1, Y2, Y3, Y4, Y5, Y6 As Integer, Down As Boolean '设置全局变量,X1、Y1等为Label1等对象的初始坐标值
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Not Down Then
X1=X
Down=True
End If
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'如果鼠标已按下,设置Label1新的坐标值
If Down Then
Label1.Left=Label1.Left+X-X1
Label1.Top=Label1.Top+Y-Y1
X1=X
Y1=Y
End If
End Sub
Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Down=False
SlideShowWindows(1).View.First'刷新屏幕,使用PowerPoint XP/2003
时加入此句
End Sub
为Image1加入以下VBA代码:
Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Not Down Then
X4=X
Down = True
End If
End Sub
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'如果鼠标已按下,设置Label1新的坐标值。
If Down Then
Image1.Left=Image1.Left+X-X4
Image1.Top=Image1.Top+Y-Y4
X4=X
Y4=Y
End If
End Sub
Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Down=False
SlideShowWindows(1).View.First'刷新屏幕,使用PowerPoint XP/2003
时加入此句
End Sub
这两段VBA代码并不复杂,稍有VB基础的读者一看便懂,这里就不详加解说了。需要指出的是,以上代码也可在PowerPoint 97/2000中正常执行。
调试执行
Label1和Image1的VBA代码都输入完成并调试无误后,按F5放映幻灯片。怎么样,幻灯片中的图像和文字是不是可以随心所欲地拖动了?
这个示例比较简单,但其原理可作为实现更复杂操控效果的基础。一个熟悉
PowerPoint VBA的人,基于此示例设计出类似于空当接龙那样的扑克游戏亦并非难事。不信,你也动手试试?看看PPT到底还有多少功能尚未挖掘出来。
VBA语言基础
第一节标识符
一.定义
标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等的引用。
二.命名规则
1)字母打头,由字母、数字和下划线组成,如 A987b_23Abc
2)字符长度小于40,(Excel2002以上中文版等,可以用汉字且长度可达254个字符)
3)不能与VB保留字重名,如public, private, dim, goto, next, with, integer, single等
第二节运算符
定义:运算符是代表VB某种运算功能的符号。
1)赋值运算符 =
2)数学运算符 &、+ (字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)
3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)
4)关系运算符 = (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is
5)位运算符 Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)
第三节数据类型
VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。
数据类型类型标识符字节
字符串型String$字符长度(0-65400)
字节型Byte无1
布尔型Boolean无2
整数型Integer%2
长整数型Long&4
vba 字符串转数组单精度型Single!4
双精度型Double#8
日期型Date无8
公元100/1/1-9999/12/31
货币型Currency@8
小数点型Decimal无14
变体型Variant无以上任意类型,可变
对象型Object无4
第四节变量与常量
1)VBA允许使用未定义的变量,默认是变体变量。
2)在模块通用说明部份,加入 Option Explicit 语句可以强迫用户进行变量定义。
3)变量定义语句及变量作用域
Dim        变量 as 类型  '定义为局部变量,如 Dim                xyz as integer
Private    变量 as 类型  '定义为私有变量,如 Private            xyz as byte
Public      变量 as 类型  '定义为公有变量,如 Public              xyz as single
Global    变量 as 类型  '定义为全局变量,如 Globlal            xyz as date
Static      变量 as 类型  '定义为静态变量,如 Static              xyz as double
一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。
4)常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,作用域也如同变量作用域。如下定义:Const Pi=3.1415926 as single 第五节数组
数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标进行。在内存中表现为一个连续的内存块,必须用Global或Dim语句来定义。定义规则如下:Dim 数组名([lower to ]upper [, [lower to ]upper, ….]) as type ;Lower缺省值为0。二维数组是按行列排列,如XYZ(行,列)。
除了以上固定数组外,VBA还有一种功能强大的动态数组,定义时无大小维数声明;在程序中再利用Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。如下例:
Dim array1() as double : Redim array1(5) : array1(3)=250 : Redim preserve array1(5,10)
第六节注释和赋值语句
1)注释语句是用来说明程序中某些语句的功能和作用;VBA中有两种方法标识为注释语句。
单引号‟⎫ ;如:‟定义全局变量;可以位于别的语句之尾,也可单独一行
Rem⎫ ;如:Rem定义全局变量;只能单独一行
2)赋值语句是进行对变量或对象属性赋值的语句,采用赋值号=,如X=123:Form1.caption=”我的窗口”
对对象的赋值采用:set myobject=object 或  myobject:=object

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