欢迎来到我的范文网!

static,vba

诚信名言 时间:2019-02-12

【www.myl5520.com--诚信名言】

ExcelVBA教程1
篇一:static,vba

VBA语言基础整理

一、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

单精度型Single!4

双精度型Double#8

日期型Date无8公元100/1/1-99/12/31

货币型Currency@8

小数点型Decimal无14

变体型Variant无以上任意类型,可变

对象型Object无4

第四节变量与常量

1)VBA允许使用未定义的变量,默认是变体变量。

2)在模块通用说明部份,加入OptionExplicit语句可以强迫用户进行变量定义。

3)变量定义语句及变量作用域

Dim变量as类型'定义为局部变量,如Dimxyzasinteger

Private变量as类型'定义为私有变量,如Privatexyzasbyte

Public变量as类型'定义为公有变量,如Publicxyzassingle

Global变量as类型'定义为全局变量,如Globlalxyzasdate

Static变量as类型'定义为静态变量,如Staticxyzasdouble

一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。

4)常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变值,作用域也如同

1

-----------------------页面11-----------------------

VBA语言基础橄榄树整理

变量作用域。如下定义:ConstPi3.1415926assingle

第五节数组

数组是包含相同数据类型的一组变量的集合,对数组中的单个变量引用通过数组索引下标 进行。在内存中表现为一个连续的内存块,必须用Global或Dim语句来定义。定义规则如下: Dim数组名([lowerto]upper[,[lowerto]upper,„.])astype;Lower缺省值为0。二 维数组是按行列排列,如XYZ(行,列)。

除了以上固定数组外,VBA还有一种功能强大的动态数组,定义时无大小维数声明;在程 序中再利用Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。

如下例:

Dimarray1()asdouble:Redimarray1(5):array1(3)=250:Redimpreservearray1(5,10)

第六节注释和赋值语句

1)注释语句是用来说明程序中某些语句的功能和作用;VBA中有两种方法标识为注释语句。

2)赋值语句是进行对变量或对象属性赋值的语句,采用赋值号,如X=123:Form1.caption=” 我的窗口”

对对象的赋值采用:setmyobject=object或myobject:=object

第七节书写规范

1)VBA不区分标识符的字母大小写,一律认为是小写字母;

2)一行可以书写多条语句,各语句之间以冒号:分开;

3)一条语句可以多行书写,以空格加下划线_来标识下行为续行;

4)标识符最好能简洁明了,不造成歧义。

第八节判断语句

1)If„Then„Else语句

IfconditionThen[statements][Elseelsestatements]

如1:IfA>BAndC<DThenA=B+2ElseA=C+2

如2:Ifx>250Thenx=x-100

或者,可以使用块形式的语法:

IfconditionThen

[statements]

[ElseIfcondition-nThen

[elseifstatements]...

[Else

[elsestatements]]

EndIf

如1:

IfNumber<10Then

Digits=1

ElseIfNumber<100Then

Digits=2

Else

Digits=3

EndIf

2)SelectCase„Case„EndCase语句

如1:

SelectCasePid

Case“A101”

Price=200

Case“A102”

Price=300

2

-----------------------页面12-----------------------

VBA语言基础橄榄树整理

„„

CaseElse

Price=900

EndCase

3)Choose函数

choose(index,choce-1,choice-2,„,choice-n),可以用来选择自变量串列中的一个值, 并将其返回,index必要参数,数值表达式或字段,它的运算结果是一个数值,且界于1和可

选择的项目数之间。choice必要参数,Variant表达式,包含可选择项目的其中之一。如: GetChoice=Choose(Ind,"Speedy","United","Federal")

4)Switch函数

Switch(expr-1,value-1[,expr-2,value-2_[,expr-n,value-n]])

switch函数和Choose函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为

TRUE的值会被返回。expr必要参数,要加以计算的Variant表达式。value必要参数。如 果相关的表达式为True,则返回此部分的数值或表达式,没有一个表达式为True,Switch会

返回一个Null值。static,vba。

第九节循环语句

1)ForNext语句以指定次数来重复执行一组语句

ForcounterstartToend[Stepstep]'step缺省值为1

[statements]

[ExitFor]

[statements]

Next[counter]

如1:

ForWords=10To1Step-1'建立10次循环

ForChars=0To9'建立10次循环

MyString=MyString&Chars'将数字添加到字符串中

NextChars'Incrementcounter

MyString=MyString&""'添加一个空格

NextWords

2)ForEach„Next语句主要功能是对一个数组或集合对象进行,让所有元素重复执行一次 语句

ForEachelementIngroup

Statements

[Exitfor]

Statements

Next[element]

如1:

ForEachrang2Inrange1

Withrange2.interior

.colorindex=6

.pattern=xlSolid

Endwith

Next

这上面一例中用到了With„EndWith语句,目的是省去对象多次调用,加快速度;语法 为:

Withobject

[statements]

EndWith

3)Do„loop语句在条件为true时,重复执行区块命令

Do{while|until}condition'while为当型循环,until为直到型循环,顾名思义,不多说 啦

Statements

Exitdo

3

-----------------------页面13-----------------------

VBA语言基础橄榄树整理

Statements

Loop

或者使用下面语法

Do'先do再判断,即不论如何先干一次再说

Statements

Exitdo

Statements

Loop{while|until}condition

第十节其他类语句和错误语句处理

一.其他循环语句

结构化程序使用以上判断和循环语句已经足够,建议不要轻易使用下面的语句,虽然VBA还支

持。

1)Gotoline该语句为跳转到line语句行

2)Onexpressiongosubdestinatioinlist或者onexpressiongotodestinationlist语 句为根据exprssion表达式值来跳转到所要的行号或行标记

3)Gosubline„line„Return语句,Return返回到Gosubline行,如下例:

Subgosubtry()

Dimnum

Num=inputbox(“输入一个数字,此值将会被判断循环”)

Ifnum>0thenGosubRoutine1:Debug.printnum:Exitsub

Routine1:

Num=num/5

Return

Endsub

4)while„wend语句,只要条件为TRUE,循环就执行,这是以前VB老语法保留下来的,如下 例:

whilecondition‘whileI<50

[statements]‘I=I+1

wend‘Wend

二.错误语句处理

执行阶段有时会有错误的情况发生,利用OnError语句来处理错误,启动一个错误的处理程序。

语法如下:

OnErrorGotoLine‘当错误发生时,会立刻转移到line行去

OnErrorResumeNext‘当错误发生时,会立刻转移到发生错误的下一行去

OnErroGoto0‘当错误发生时,会立刻停止过程中任何错误处理过程

第十一节过程和函数

过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、 更具结构性。VBA具有四种过程:Sub过程、Function函数、Property属性过程和Event事件

过程。

一.Sub过程

Sub过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例: Subpassword(ByValxasinteger,ByRefyasinteger)

Ify=100theny=x+yelsey=x-y

x=x+100

Endsub

Subcall_password()

如何利用VBA编写控制Word域的功能
篇二:static,vba

static,vba。

Word域在软件开发中的应用

liyu

摘要 域是Word最具有实用价值的功能之一,它表示文档中可能发生变化的数据或邮件合并文档中套用信函、标签中的占位符。Microsoft Word 可以在您使用一些特定命令时插入域,如“插入”菜单上的“日期和时间”命令。您也可使用“插入”菜单上的“域”命令手动插入域。

1.引言

事实上,我们在日常工作中常会脱离Microsoft Word的操作环境。一般,用户是先建立好一些Word文件模板,然后利用所提供的应用程序功能向Word文件模板中插入域,然后用该域对应的值取代域值,这样就达到了向Microsoft Word文件中插入数据的作用。我们常把数据放入数据库中,数据库的内容不断地变化,我们的域值也跟着不断地变化,取到灵活自动更新的作用,要达到这方面的功能,就应该把数据库与Word域结合起来。

首先要解决这一问题,我们必须先了解Word域有关的知识:Word域代码位于花括号或大括号 ( { } )中,域类似于 Microsoft Excel 中的公式:域代码类似于公式,域结果(域结果:当 Microsoft Word 执行域指令时,在文档中插入的文字或图形。在打印文档或隐藏域代码时,将以域结果替换域代码。)类似于公式产生的值。可在文档中切换显示域代码及其结果。正好,数据库的字段名对应域代码,字段值对应域结果。

2.实现功能

下面是本人利用VBA编写的一通用的处理Word域的程序:

主要功能:通用VB6编写通用的类,给用户提供可视化的编辑界面,用于用户在Word文件中插入域标志。针对Word文件或Excel表格文件,扫描整个文件,将其中的域标志(如Set “aaa”)取出来,然后通过从数据库中取出”aaa”字段所对应的值,将值填写到文件中域对应的位置。若对应位置已有值,则判断该值与要填写的值是否相同,若不同则替换。插入值分为:

A.单纯的值,直接使用一个值替换域。

B.表格中的单元格。若该表格填写不下,是否增加表格单元?以及与该单元关联的域等。

3.操作步骤

3.1建立项目

开发方法:启动VB6,新建一ActiveX Dll工程,把工程名更改为VbaWord,把类名Class1更改为CSetDocField,向工程中增加一窗体Form1, 窗体标题为处理Word文档,在Form1上加入2个CommandButton,用于打开文件和保存文件用的命令按钮;2个ComboBox,用于所插入的字段名;2个 Label;2个CommonDialog,用于执行打开文件和保存文件。界面如下:

3.2在项目中加入引用

按工程--引用--Microsoft Word 10.0 Object Library引用Word(OFFICE 2000为Microsoft Word 9.0 Object Library)。

3.3增加操作窗体

在Form1的代码窗中定义以下变量:

Option Base 0

'申请Word应该对象及文档对象

Private wdApp As New Word.Application()

Private wdDoc As New Word.Document()

'所处理的Word模板

Private FileName As String

'申请CSetDocField对象

Private mDocFld As New CSetDocField()

'Word工具栏对象及菜单栏对象

Dim CommandBarIndex() As Integer

Dim SaveCommandBarMenuIndex() As Integer

' 在Form的Load的事件中定义的打开和保存文件的格式,并填充ComboBox数据。ComboBox数据对应数据库表的字段名,这里由CSetDocField的属性提供。

Private Sub Form_Load()

Dim i As Integer

CommonDialog1.DialogTitle = "打开"

CommonDialog1.Filter = "Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot"

CommonDialog2.DialogTitle = "保存文件"

CommonDialog2.Filter = Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot" FieldCount = 0

Me.ScaleY(Me.height, fromscale:=vbTwips, toscale:=vbPoints)

For i = 1 To gFieldColl.Count

Combo1.AddItem(gFieldColl.Item(i))

Next

For i = 1 To gTableColl.Count

Combo2.AddItem(gTableColl.Item(i))

Next

End Sub

在Form1的代码窗中定义以下过程和函数:

'定义打开Word文件的过程。建立Word应该对象及文档对象,并打开文件。

Private Sub OpenWordDocument(ByVal FileName As String)

wdApp = CreateObject("Word.Application")

wdApp.Documents.Open(FileName)

wdDoc = wdApp.ActiveDocument

wdDoc.ActiveWindow.DocumentMap = False

wdApp.Visible = True

IsWordRunning = True

End Sub

'在文档中插入域.KeyWord:域的关键字.

这里我们利用Word文档对象的域对象的Add方法向Word文件中插入域。域的Data属性代表该域的名称。插入域时应该选取得插入点(Selection),既用户光标处位置。如果该位置是单

元格且已插入域应该提示是否覆盖

Private Function InsertField(ByVal KeyWord As String) As Integer

Dim mySelection As Selection

Dim Code As String

Dim MyField As Field

Dim myRange As Range

wdApp.Selection.Collapse(Direction:=wdCollapseEnd)

mySelection = wdApp.Selection '插入点

If IsCell(mySelection) = True Then

If CellFieldCount(mySelection) > 0 Then

If MsgBox("该单元格已有域,是否覆盖?", vbYesNo) = 6 Then

mySelection.Cells(1).Select()

mySelection.Delete() ' .Text = Value

' mySelection.Delete Unit:=wdCharacter, Count:=1

'mySelection.Cells(1).Range.Fields(1).Delete

Else

Exit Function

End If

End If

End If

MyField = wdDoc.Fields.Add(Range:=mySelection.Range, Type:=wdFieldAddin) MyField.Data = KeyWord

End Function

'选择点(光标)是否是单元格.

我们可以通过选择点的表格数判断插入点的性质。表格数为0,则选择点不位于单元格中,反则不位于单元格中。

Private Function IsCell(ByVal mySelection As Selection) As Boolean

If mySelection.Tables.Count > 0 Then

IsCell = True

Elsestatic,vba。

IsCell = False

End If

End Function

'取得选择点(光标)的单元格的域数

Private Function CellFieldCount(ByVal mySelection As Selection) As Integer CellFieldCount = mySelection.Cells(1).Range.Fields.Count

End Function

'打开Word文件.并使处理界面位于Word最顶端,适当调整Word位置,关闭Word其它功能。 Private Sub cmdOpenFile_Click()static,vba。

CommonDialog1.ShowOpen()

FileName = CommonDialog1.FileName

If FileName = "" Then

Exit Sub

End If

OpenWordDocument(FileName)

IsShowField(True)

SetWordSize(0, 42, 2000, 2000)

CloseCommandBar()

Me.top = 0

Me.Left = 0

Me.width = 100000

Me.height = 850

Picture1.top = Me.top

Picture1.Left = Me.Left + 2000

cmdSave.Left = 2000

cmdSave.top = cmdOpenFile.top

Combo1.Enabled = True

Combo2.Enabled = True

cmdSave.Visible = True

cmdOpenFile.Visible = False

End Sub

'保存Word文件.

Private Sub cmdSave_Click()

IsShowField(False)

CommonDialog2.FileName = gSavePath + FileName CommonDialog2.FileName = gSavePath + FileName CommonDialog2.ShowSave()

wdDoc.SaveAs(CommonDialog2.FileName) End Sub

'用户选择所插入域的域名,并在光标处插入域。 Private Sub Combo1_Click()

Dim KeyWord As String

KeyWord = Combo1.Text

InsertField(KeyWord)

End Sub

Excel VBA入门(0起点想学VBA的看过来哦亲!
篇三:static,vba

Excel VBA入门(0起点想学VBA的看过来哦亲!O(∩_∩)O~)(连载中)

楼主杨皓珺 2011-06-13 21:01

恩……

在其他论坛上看到一好贴~但是觉得有点繁复啰嗦~于是结合自己的学习体验借鉴一下人家帖子的内容~加上一些截图~~嘿嘿~*^-^*

此帖以office2010的版面为参考~~其他版本的功能应该相同~只是工具栏的位置有所变化而已 P.S:楼主非专业人士~VBA纯自学出生~~~~~若发现错误素质好~扛得住……

【初识VBA】

用了很久的Excel了吧?熟的不能再熟了吧?但是传说中的VBA是什么呢?

VBA嘛~简单来说就是写程序。既然是程序,那么就是由代码组成的。那么代码在哪里呢?不能在单元格里吧?哈哈

那么在任意菜单栏的地方单击右键~选择“自定义功能区”~把“开发工具”前面的小钩选上吧!

~大家尽管各种拍砖指正~~~楼主心理

现在咱们有了“开发工具”这个菜单栏了~点到菜单栏里~点击最左边的图标“Visual Basic”,就可以看到VBA代码编辑器了。当然,更简洁的方法是快捷键Alt+F11。

咱来看看VBA代码编辑器的样子吧~哈哈~就长这样:

~当然了……刚刚打开里面是不会像上图那样有那么多代码的~~你看到的一定是空白一片~哈哈~~~~

跃跃欲试了吧?想写自己的程序了吧?别急……慢慢来~~

【VBA代码编辑器】

我们来看看这个编辑器里面有些什么吧。

右边这个占地面积最大的~不用说~就是代码编辑窗口~~~代码就写在里面。那么上面那个“通用”和“声明”是神马?恩……左边那个是“对象列表框”,可以选择这个SHEET里面包含的所有对象。右边那个是“过程列表框”,选择和左侧当前选中的对象关联的事件或自定义过程。(神马是对象、过程和事件呢……恩……后续再道来。)

左边是“工程资源管理窗口”。我们可以看到列表里有excel表格里面所有的工作表,还有一个叫做“ThisWorkBook”的东东。恩~双击试试看,发现每一项双击之后都会出现一个新的代码编辑窗口。很显然,关于每一个工作表的程序需要写在相应的代码编辑窗口中。而“ThisWorkBook”里面则是放入对整个工作簿进行操作的代码。

左下角的是“属性窗口”,如果没有看到的话,可以按快捷键F4,就出现了!试试看点击上面列表里面的各种项目,可以看到属性框里面的内容在发生变化。是的~这里就是显示所选定的对象的各项属性的。我们可以双击每一个属性的值对其进行修改。

我们在介绍一个窗口。按一下快捷键F2。哇~这个窗口里面密密麻麻的……这是“对象浏览器”。我喜欢在这个地方查找excel里面各种类,以及它有些什么属性、事件和方法。恩……神马是类、属性、事件和方法?额~还是后续慢慢道来吧。

回复| 举报 90阅读 | 10评论

2楼杨皓珺 2011-06-13 23:18

写作业写累了……继续来写帖子~~~~(所以写作业累……写帖子就不累了吗?╮(╯▽╰)╭)

【类和对象】

神马是对象呢?对象就是东西(废话~难道对象不是东西么?!)。好吧~举个例子~~一般程序教材喜欢举的都是苹果啦、自行车啦……咱举点excel的例子吧。比如excel的工作簿是一个对象,比如excel的每一张工作表也都是对象,再比如excel里的每一个单元格也全部都是对象。

神马是类呢?类就是对象的集合。抽象对不?那就再举个例子~~~一般的程序教一般程序教材喜欢举的都是苹果啦、自行车啦……咱再举excel的例子吧。比如excel的工作薄是类,比如工作表是类,再比如单元格也是类。

(等等等等!

楼主是不是copy&paste搞错了?!肿么苹果是对象,苹果又是类呢?肿么单元格

是对象,单元格又是类呢?

咳……楼主没有搞错。注意对比一下两段,会发现楼主的用词有点小区别哦。

我们说单元格是类的时候,并没有特指某一个单元格,而是指的单元格这个概念。而某些特定的单元格~比如单元格A1、K10~都是属于单元格这个类

本文来源:http://www.myl5520.com/mingrenmingyan/95134.html

推荐内容