当前位置:文档之家› VBA教材

VBA教材

VBA教材
VBA教材

目录

第一讲VBA与宏及VBE窗口的介绍 (2)

第二讲录制宏修改宏保存宏指定宏自定义按钮加载宏 (3)

第三讲VBA的语法基础 (7)

第四讲Range对象 (8)

第五讲VBA语句(一) (12)

第六讲VBA语句(二) (15)

第七讲错误处理和代码调试 (17)

第八讲工作表和工作薄对象 (19)

第九讲目录的制作 (21)

第十讲工作表和工作薄事件OnTime和OnKey事件 (24)

第十一讲自定义函数 (27)

第十二讲添加快捷菜单 (30)

第十三讲添加菜单 (32)

第十四讲窗体与控件和音乐播放器的制作 (34)

第十五讲怎样才能不断的提高VBA水平 (38)

附录一最常用的语句 (39)

附录二最常用关键字 (44)

前言

Excel作为使用最广泛的电子表格软件,它以操作简便,功能丰富和效率高而著称,非常适合对计算机熟悉程度不高的人员使用。但是随着学习的深入,工作上的需求,提高工作效率,用户期望Excel提供更加自动化的操作,这就需要借助Excel VB A。

VBA的优点:

1.解决重复的操作。(大大提高了工作效率)

2.在Excel的现有基础上再增添一些更适合自己的新功能

3.可以自定义函数(来简化冗长的公式和计算,方便初,中级用户)

4.设置个性化的操作界面(更适合自己工作的菜单,快捷菜单)

5.二次开发

本教材包括的内容,前面第一讲到第七讲是VBA基础内容;第八讲到第十五讲是提高篇和实例讲解篇

附:书中代码前面#表示行,如4#表示第4行。

EXCEL学习网站:https://www.doczj.com/doc/7e12661508.html,

佛山小老鼠编

2010年12月

第 1 页共45 页

第一讲VBA与宏及VBE窗口的介绍

一.VBA的定义:

内置在Excel里一种最简单的编程语言。打个比方我们去英国,那我们要会英文,才能和当地的人进行沟通,我们要用和Excel进行人机对话,那我们要会VBA,也就是说VBA是Excel能识别的编程语言,也是编程员能识别的一种最简单的编程语言。

二.什么是宏:

宏是一连串动作的集合,动作是由VBA代码组成的,打个比方说,我们家里以前的洗衣机是有加水,加洗衣粉,转动,放水,甩干,现在我们把其它打包成一个命令按钮,这样我们只要按一下,衣服就洗好了,以前要用按五下,这样就大提高了工作效率,实现办公自动化。所以接触过Excel的朋友都会通过录制宏来完成一些重复的工作。

三.VBE窗口的介绍:

1. 进入VBE窗口的方法:

因为VBE窗口是VBA代码编辑窗口,我们所有的代码都在VBE窗口里编写。第一种方法:Alt+F11,第二种方法:通过命令按钮进行,(如图1)(备注我们常用工具栏上没有这个,要从自定义里拖出来才有),进入VBE编辑的方法不只这二种

第 2 页共45 页

2.VBE窗口的介绍:

A.视图菜单下:工程资源管理器;属性窗口;立即窗口。

B.插入菜单下:插入模块;插入过程;插入用户窗体。

C.调试菜单下:逐语句调试(快捷键F8)。切换断点(快捷键F9)

D.运行菜单下:运行子过程(快捷键F5)

F.工具菜单下:选项?编辑器格式选项卡?字体大小为11磅

3.代码的缩进:

A.Tab键右缩进

B.Shift+Tab键,还原右缩进一步

4.模块:

A.普通模块,对象模块(工作表模块,工作薄模块),窗体模块,类模块。

第二讲录制宏修改宏保存宏指定宏自定义按钮加载宏

1.录制行高的宏

方法:选择第3行 选择工具菜单 宏 录制新宏,跳出一个对话框,确定后,选择第3行,单击鼠标右键,行高 设置为30 确定,然后选择工具 宏 停止录制

ALT+F11,打开VBE编辑窗口,左键双击模块,这就是刚才录制的宏代码,

1# Sub Macro1()

2# Selection.RowHeight = 30

3 # End Sub

代码解析第一行表示子过程开始;第二行Selection是选择的意思, RowHeigh 行高,选择的行高设置为30;第三行是结束的意思

继续,在画图工具中选择椭圆,再左键点椭圆,右键,点击指定宏,做到这步以后,选择第6行,然后点击椭圆,看看效果,这个就是录制宏到使用宏

第 3 页共45 页

2. 录制选择性粘贴的宏

方法:打开工作薄”选择性粘贴的宏(未做的)”备注这个工作薄在课件里 选择工作表1 选择工具菜单 宏 录制宏,跳出一个对话框,绝对引用 确定后 选择区域B3:C7 单击鼠标的右键 复制 选择区域H3:I7 选择性粘贴 加 确定 双击单元格E3, 单击单元格E4 停止录制

ALT+F11,打开VBE编辑窗口,这就是刚才录制的宏代码,

1# Sub Macro1()'

2# ' Macro1 Macro

'3# 宏由999宝藏网录制,时间: 2011-2-7

4# Range("B3:C7").Select

5# Selection.Copy

6# Range("H3:I7").Select

7# Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _ False, Transpose:=False

8# End Sub

代码解析:第四行代码单元B3:C7选中,第五行代码复制B3:C7,第六行代码单元格H3:I7选中,第7行代码选择性粘贴,加

然后把宏指定给一个椭圆,试试

3. 录制一个清除数据的宏

方法:选择工具菜单 宏 录制宏,跳出一个对话框,绝对引用 选择区域B3:C7,按Delete键然 停止录制

ALT+F11,打开VBE编辑窗口,这就是刚才录制的宏代码,

1# Sub Macro2()' Macro2 Macro

' 宏由雨林木风录制,时间: 2010-11-24

第 4 页共45 页

2# Range("B3:C7").Select

3# Selection.ClearContents

4# End Sub

代码解释: 第二行单元格B3:C7选中;第三行清除选中的单元格里的数字

然后把宏指定给一个椭圆,试试

4. 修改宏:

修改第2个宏

1# Sub 汇总()

2# Range("B3:C7").Copy

3# Range("H3:I7").PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd

4# Application.CutCopyMode = 0

5# End Sub

代码解释第二行复制单元格B3:C7;第三行把复制的数据选择性粘贴到单元格H3:I7,Operation:=xlAdd的意思是选择加;第四行代码取消复制模式,也就是那个虚线框

5. 保存宏

一种是保存在当前工作薄,一种是保存在个人宏工作薄,另一种保存新工作薄

6. 自定义按钮

视图菜单 工具栏 自定义 命令选项卡 类别 宏 按住左键不放,把自

第 5 页共45 页

定义按钮那个笑脸拖到常用工具栏上 把光标放在那个笑脸上(前提条件是不要关闭自定义工具栏 单击鼠标右键 命名 更改按钮图像 指定宏(指定你要实现的此功能

第 6 页共45 页

7. 指定宏:

可以把宏指定给图片,自选图形。

第三讲VBA的语法基础

1.数据类型:

学生的姓名,学生的年龄,学生的出生日期(常用数据类型有:Byte(字节型); Integer (整型); Long(长整型); Single(单精度浮点型,7位有效数字); Double (双精度浮点型,有效数字15位); String(字符串型);对象型(例如单元格区域和工作表); Variant(变体型,也叫万能的类型)

2.变量:变量可以使程序变得更加富有活力

(1).变量名称要注意几点:

A.不能把关键字做变量名

B.部分符号不能在变量中出现,如(#*%!)

C.不区分大小写,但我们一般大小写混写,第一个字母大写,其它的小写。

D.也可以使用中文名称,但是尽量不用中文名称,如果在英文版会报错。

(2)变量声明(电脑里划出一个储存区域来储存变量的值,变量的声明就决定了变

量的大小,而大小就是我们前面讲的数据类型决定的)

(3)变量的声明方式

A.语法格式: Dim 变量as 数据类型.如Dim i as Integer

B.也可以一行定义多个变量,之间用逗号分开

如Dim i As Integer, F As String, D As Long

(4).强制声明:变量使用前声明是一个好习惯,由于VBA里可以不声明变量,因此用户会忘记这一点,所以我们要求变量进行强制声明(工具菜单==选项==编辑器==要求声明变量)

(5)变量的作用域:

A.过程级变量

B.模块级变量

c.全局级变量

3.运算符和表达式:

第7 页共45 页

(1).算术运算符:有+,-,*,/,&

(2).比较运算符:=,<>,>=,<=,Like

(3).逻辑运算符:And,Or,Not

(4)表达式:右边的值赋给运算符左边的

第四讲Range对象

Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,在操作Excel 内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。

1.单元格的引用方法及应用

在VBA中经常需要引用单元格或单元格区域,主要有以下几种方法。

1)使用Range属性

VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。

1# Sub 选择1()

2# Sheet1.Range("A1:D9, D1:D9").Select

3# End Sub

代码解析:第二行单元格A1:D9和单元格D1:D9同时选中

“选择1”过程使用Select方法选中A1:A9,D1:D9单元格区域。

Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:

Range(Cell1, Cell2)

参数Cell1是必需的,必须为A1 样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括美元符号(即绝对地址,如“$A$1”)。

2)使用Cells属性

使用Cells属性返回一个Range对象,如下面的代码所示

第8 页共45 页

Sub 输数字1()

Dim I As Integer

For I = 1 To 10

Sheet1.Cells(I, 1) = I

Next I

End Sub

代码解析:

“输数字1”过程使用For...Next语句为工作表中的A1:A10单元格区域填入序号1到10。

Cells属性指定单元格区域中的单元格,语法如下:

Cells(RowIndex, ColumnIndex)

参数RowIndex是可选的,表示引用区域中的行序号。

参数ColumnIndex是可选的,表示引用区域中的列序号。

如果缺省参数,Cells属性返回引用对象的所有单元格。

Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环

3)使用快捷记号

在VBA中可以将A1引用样式或命名区域名称使用方括号括起来,作为Range 属性的快捷方式,这样就不必键入单词“Range”或使用引号,如下面的代码所示。

Sub 输字2()

[A1:A10] = "佛山小老鼠"

End Sub

代码解析:

“输字2”过程使用快捷记号为单元格区域赋值。

第2行代码使用快捷记号将活动工作表中的A1:A10单元格赋值为”佛山

第9 页共45 页

小老鼠”

注意使用快捷记号引用单元格区域时只能使用固定字符串而不能使用变量。

4)使用Offset属性

可以使用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。

Sub 输数字3()

Sheet1.Range("A1:A10").Offset(1, 1) = 2

End Sub

代码解析:

“输数字3”过程使用Range对象的Offset属性选中A1:A10单元格偏移一行一列后的区域B2:B11,且在B2:B11输入了数字2

应用于Range对象的Offset 属性的语法如下:

expression.Offset(RowOffset, ColumnOffset)

参数expression是必需的,该表达式返回一个Range对象。

参数RowOffset是可选的,区域偏移的行数(正值、负值或0(零))。正值表示向下偏移,负值表示向上偏移,默认值为0。

参数ColumnOffset是可选的,区域偏移的列数(正值、负值或0(零))。正值表示向右偏移,负值表示向左偏移,默认值为0。

5)使用Resize属性

使用Range对象的Resize属性调整指定区域的大小,并给单元格区域赋值,如下面的代码所示。

第10 页共45 页

Sub 输数字4()

Sheet1.Range("A1").Re size(3, 3) = “佛山小老鼠”

End Sub

6)使用Union方法

使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可

以实现对多个非连续区域一起进行操作,如下面的代码所示。

Sub 输数5()

Union(Sheet1.Range("A1:A9"), Sheet1.Range("D1:D9,G1:G9")) = "佛山小老鼠" End Sub

也可以用代码

Sub AA()

Range("A1:D9,D1:D9,G1:G9") = "佛山小老鼠"

End Sub,

不过要记得中间是用逗号分开,只能是一对双引号

代码解析:

“输数字4”过程给单元格区域A1:A9和D1:D9,G1:G9所组成的区域赋值为”佛山小老鼠。Union方法返回两个或多个区域的合并区域,语法如下:expression.Union(Arg1, Arg2, ...)

其中参数expression是可选的,返回一个Application对象。

参数Arg1, Arg2, ...是必需的,至少指定两个Range对象。

7)使用UsedRange属性

使用UsedRange属性返回指定工作表上已使用单元格组成的区域,如下面的代码所示。

Sub 选择2()

https://www.doczj.com/doc/7e12661508.html,edRange.Select

End Sub

代码解析:

第11 页共45 页

“选择2”过程使用UsedRange属性选择工作表上已使用单元格组成的区域,包括空单元格。

8)Cells(数字),一个单元格有一个数字代表,因为一行有256个单元格,257就是第二行的第一个单元格如

Sub AA()

Cells(257) = "小老鼠"

End Sub

第五讲VBA语句(一)

一.With End With可以对代码进行精减

精简前的如下

1# Sub Macro1()

2# ' Macro1 Macro

3# ' 宏由999宝藏网录制,时间: 2011-2-8

4# Selection.Font.Bold = True

5# With Selection.Font

6# .Name = "宋体"

7# .Size = 18

8# .Strikethrough = False

9# .Superscript = False

10# .Subscript = False

11# .OutlineFont = False

12# .Shadow = False

13# .Underline = xlUnderlineStyleNone

14# .ColorIndex = xlAutomatic

15# End With

16# Selection.Font.ColorIndex = 3

第12 页共45 页

17# End Sub

代码解析:第4行代码选中字体加粗;第五行到15中间用了一个With End With 语句;第6行字体为宋体;第7行字体大小为18磅,Size是大小的意思;第8行Strikethrough是删除线的意思;第9行代码Superscript是上标的意思;第10行代码Subscript是下标的意思; 第11行OutlineFont字体空心的意思;第12行代码Shadow是阴影的意思;第13行代码是下划线类型为无;14行字体的颜色为自动精简后的如下

1# Sub Macro1()

2# With Selection.Font

3# .Name = "宋体"

4# .Size = 18

5# .Bold = True

6# .ColorIndex = 3

7# End With

8# End Sub

代码解析:第2行选中的单元格字体进行设置;第3行代码字体为宋体;第4行代码字体大小为18磅;第5行代码字体加粗;第6行代码字体颜色为红色

二.If Then 判断语句(单行结构)

1# Sub 按钮1_单击()

2# If Range("a1").Value >= 60 Then

3# Range("b1") = "及格"

4# End If

5# End Sub

代码解析:第2行代码判断,如果A1单元格的值大于等于60,那么;第3代码在单元格B1输入及格

三. If Then Else(简单的多行分支结构)

1# Sub 按钮1_单击()

2# If Range("A1").Value < 60 Then

第13 页共45 页

3# Range("B1").Value = "不及格"

4# Else

5# Range("B1").Value = "及格"

6# End If

7# End Sub

代码解析:

第2行代码判断,如果A1单元格的值小于60,那么;第3行代码给单元格B1赋值为”不及格”;第4行代码是否则;第5行代码给单元格B1赋值为”及格”

四. If Then ElseIf Then (ElseIf Then … )Else复杂的多行分支结构1# Sub 加循环的复杂的多行分支结构()

2# Dim I As Integer

3# For I = 2 To 11

4# If Range("A" & I) < 60 Then

5# Range("B" & I) = "不及格"

6# ElseIf Range("A" & I) < 70 Then

7# Range("B" & I) = "及格"

8# ElseIf Range("A" & I) < 80 Then

9# Range("B" & I) = "良好"

10# Else

11# Range("B" & I) = "优秀"

12# End If

13# Next I

14# End Sub

代码解析:

第2行定义变量I为整型;第3行代码到13行代码用了一个循环语句For Next;第4行代码判断A列从A2开始到A11的值是否小于60;第5代码如果第4代码小于60,那么对应的B列从B2开始到B11单元格显示不及格,同理第6行,第7行,第8行,第9行代码。

五.Inputbox 和Msgbox函数

1# Sub 按钮1_单击()

第14 页共45 页

2# On Error Resume Next

3# Application.DisplayAlerts = 0

4# Sheet1.Delete

5# Application.DisplayAlerts = 1

6# ANS = MsgBox("只剩下最后一张工作表了,不能删除", 48, "佛山小老鼠提醒你")

7# End Sub

代码解析:

第2行过程中有错语就忽掉;第3行阻止弹出保存提示对话框;第4行代码工作表1删除;第5行代码还原第3行代码,这两个是一对一对的用;第6行代码用输出函数MsgBox弹出提示

1# Sub 按钮1_单击()

2# S = InputBox("请输入姓名", "输入提醒")

3# Range("A1") = S

4# End Sub

代码解析:

:第2行用输入函数InPutbox提醒输入姓名且把其输入的值赋给S;第3行代码把S赋给单元格A1

第六讲VBA语句(二)

一.For Next语句

1# Sub 按钮1_单击()

2# Dim I As Byte, C As Integer

3# For I = 1 To 100

4# C = C + I

5# Next I

6# MsgBox C

7# End Sub

代码解析:

第15 页共45 页

:第2行定义变量I为字节型,C为整型;第3行代码到第5行用了一个循环语句For Next ,给I赋值,赋值范围从1到100;第4行代码累加;第6行代码用输出函数MsgBox显示最后累加的C

二For Each Next语句

1# Sub 按钮1_单击()

2# Dim RG As Range

3# For Each RG In Range("A1:A10,D1:D10")

4# C = C + RG

5# Next RG

6# MsgBox C

7# End Sub

代码解析:

第2行代码定义变量RG为对象型,单元格对象型;第3代码到第5行代码用了一个循环语然For Each Next语句,以RG在单元格区域A1:A10,D1:D10中循环一次;第4行代码,把单元格RG的值累加;第6行代码用输出函数MsgBox显示最后累加的C

三.Select Case 语句

1# Sub aa()

2# Dim I As Integer

3# For I = 2 To 7

4# m = Sheet1.Range("a" & I)

5# Select Case m

6# Case Is >= 80

7# Sheet1.Range("b" & I) = "优秀"

8# Case Is >= 70

9# Sheet1.Range("b" & I) = "良好"

10# Case Is >= 60

11# Sheet1.Range("b" & I) = "及格"

12# Case Else

第16 页共45 页

13# Sheet1.Range("b" & I) = "不及格"

14# End Select

15# Next I

16# End Sub

代码解析:

第2行定义变量I为整型;从第3行到15行用了一个循环语句For Next,给I 赋值从2到7;第4行代码把工作表1从A2开始到A7的值赋给m;从第5行代码到14行代码用了Select Case End Select语句

第七讲错误处理和代码调试

一错误类型(语法错误,编译错误,运行错误,逻辑错误)

A.语法错误(把关键字写错,把Dim写成Dam)

B.编译错误(If后面没有Then就换行)

C.运行错误(比方说0不能作为除数,运行是就会报错)

D.逻辑错误(运行的结果和我们预期的发生了偏差

1# Sub 除数为0()

2# A = Range("A1")

3# B = Range("B1")

4# C = A / B

5# MsgBox C

6# End Sub

代码解析:

第2行代码把单元格A1的值赋给A;第3行把单元格B1的值赋给B;第4行代码把A除以B的值赋给C;第5行代码用输出函数MsgBox显示C

第17 页共45 页

1# Sub 除数为0的解决()

2# A = Range("A2")

3# B = Range("B2")

4# If B = 0 Then

5# Exit Sub

6# Else

7# C = A / B

8# End If

9# MsgBox C

10# End Sub

代码解析:

第2行代码把单元格A1的值赋给A;第3行把单元格B1的值赋给B;第4行代码用了一个判断语句IF。如果单元格B2的值为0,那么;第5行代码退出程序。

1# Sub 除数为字符串的()

2# A = Range("A3")

3# B = Range("B3")

4# If B = 0 Then

5# Exit Sub

6# Else

7# C = A / B

8# End If

9# MsgBox C

10# End Sub

代码解析:

同上

1# Sub 除数为字符串解决的的()

2# A = Range("A4")

3# B = Range("B4")

4# If B = 0 Or IsNumeric(A) = False Or IsNumeric(B) = False Then

第18 页共45 页

使用VBA操作Word表格

使用VBA操作Word表格 一、生成表格 Private Sub CreateTable(mRows As Integer, mColumns) Dim mRange As Range Set mRange = Start:= End:= SelfGenTable = NumRows:=mRows, NumColumns:=mColumns) End Sub 上面过程的作用是在活动文档的末尾插入一个mRows行,mColumns列的表格。 二、在读写表格中的单元格 写入单元格使用如下代码: (Row:=curRow, Column:=curColumn). "文本" 上面代码的做用时在curRow行,curColumn列处插入字符“文本”。 其中TableObject为表格对象,如果使用了生成表格中的例子,那么可以用SelfGenTable 来替代TableObject。 三、调整单元格对齐方式 水平对齐设置 水平对齐常数(具体的常数可以查看帮助文件的说明) 如何选择单元格 选定特定单元格 (Row:=1,Column:=1).Select’选定单元格1,1 选定行 (i).Select’选定第i行 选定列 (i).Select’选定第i列 选定整个表格 首先执行表格元素选择程序,然后再使用设置对齐方式。 垂直对齐方式 垂直对齐常数 也是首先选择表格元素,可以使单个单元格,单个行、单个列或者整个表格。似乎也可以同时选择多个单元格、多个行、多个列,有兴趣的朋友可以自行寻找答案。 四、设置表格边线类型 下面的代码对整个表格的所有边线设置成细实线: With Selection .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle .Borders(wdBorderRight).LineStyle = wdLineStyleSingle .Borders(wdBorderTop).LineStyle = wdLineStyleSingle .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle .Borders(wdBorderVertical).LineStyle = wdLineStyleSingle End With 同样是对Selection进行设置,所以可以依照上面的方法对特定的单元格、行或者列的边线

VBA操作网页读取数据自动填入EXCEL表中

VBA操作网页读取数据自动填入EXCEL表中 Sub a正式查分程序() '运行时会出现错误提示,中止程序,更改j初值后重新运行 Dim ie, dmt Dim i, j, k, bb, nianfen As Integer Dim text1 As String '存储考号 Dim text2 As String '存储报名序号 Dim text3 As String '存储浏览器地址 Dim fuwuqi As String '存储服务器地址 Dim tijiao As String '存储提交命令 nianfen = 2012 '存储年份,每年更改“2012” fuwuqi = "http://218.28.109.125:81/cjcx/tmp_cx_zzcj.php" '自行更改为可用服务器 tijiao = "&cmdok=???" 'cmdok=???为提交命令 bb = Sheet3.Range("a65536").End(xlUp).Row '计算当前工作表sheet3的有效行数,需自行更改“sheet3” ' On Error Resume Next

'主程序 k = 0 For j = 2 To bb '循环变量从2到sheet2最后一行,出错后起始值改为当前行 k = k + 1 ' If k > 20 Then '每20行,可以增大“20”数值 ActiveWorkbook.Save '自动保存 ActiveWindow.ScrollRow = j '自动滚屏到当前行 k = 0 '循环变量清零 End If text1 = Cells(j, 1) '从当前行第一列读取考号,根据情况调整列“1”数值 text2 = Cells(j, 2) '从当前行第二列读取报名序号,根据情况调整列“2”数值 '生成查询地址 text3 = fuwuqi & "?textdate=" & nianfen & "&textkh=" & text1 & "&textzjhm=" & text2 & tijiao '创建网页对象

Excel-VBA操作文件四大方法之四利用API函数来处理文件

Excel-VBA操作文件四大方法之四 四、利用API函数来处理文件 通过前面三种方法的介绍,你是否已经觉得足够了?是的,前面的方法完全可以应付几乎所有的文件操作。但是为了普及一下API,展示一下API的魅力,最后向大家介绍一下如何利用API函数来处理文件。另一方面也是本人对API情有独钟,为她做一下广告,呵呵。大家对API的强大也是有所耳闻了,在文件操作方面,API自然毫不逊色。 说明:为了文章简洁,我们先给出API函数的名称及功能,其完整的声明及常数就不再一一细诉,只在示例中给出其完整用法。 (一)处理驱动器及目录 下面是windows中提供的对于目录进行操作的API函数及其功能: CreateDirectory,CreateDirectoryEx 创建一个新目录 GetCurrentDirectory 在一个缓冲区中装载当前目录 GetDiskFreeSpace,GetDiskFreeSpaceEx 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 GetDriveType 判断一个磁盘驱动器的类型 GetFullPathName 获取指定文件的完整路径名 GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径GetSystemDirectory 这个函数能取得Windows系统目录(System目录)的完整路径名。在这个目录中,包含了所有必要的系统文件。根据微软的标准,其他定制控件和一些共享组件也可放到这个目录。通常应避免在这个目录里创建文件。在网络环境中,往往需要管理员权限才可对这个目录进行写操作 GetTempPath 获取为临时文件指定的路径 GetVolumeInformation 获取与一个磁盘卷有关的信息 GetWindowsDirectory 这个函数能获取Windows目录的完整路径名。在这个目录里,保存了大多数windows应用程序文件及初始化文件 RemoveDirectory 删除指定目录 SetCurrentDirectory 设置当前目录 SetVolumeLabel 设置一个磁盘的卷标(Label) 下面通过几个例子来详细的了解一下其中主要的几个函数及其用法: 1、GetLogicalDrives 作用:判断系统中存在哪些逻辑驱动器字母 声明:Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" () As Long 说明:此函数的返回值类型为Long,这个结构中的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;位1设为1表示存在B:驱动器;以次类推 示例: Public Sub Get_LogicalDrives() Dim LDs As Long, Cnt As Long, sDrives As String LDs = GetLogicalDrives sDrives = "Available drives:" For Cnt = 0 To 25 If (LDs And 2 ^ Cnt) <> 0 Then

Excel中用VBA-Worksheet基本操作应用示例

Application对象及其常用方法基本操作应用示例 Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。 示例01-01:体验开/关屏幕更新(ScreenUpdating属性) Sub 关闭屏幕更新() MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" Application.ScreenUpdating = True Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select MsgBox "下面与前面执行的程序代码相同,但关闭屏幕更新功能" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = False Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select Application.ScreenUpdating = True End Sub 示例说明:ScreenUpdating属性用来控制屏幕更新。当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CPU 的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。 示例01-02:使用状态栏(StatusBar属性) Sub testStatusBar() Application.DisplayStatusBar = True '开启状态栏显示 '赋值状态栏显示的文本 Application.StatusBar = "https://www.doczj.com/doc/7e12661508.html," End Sub 示例说明:StatusBar属性用来指定显示在状态栏上的信息。若不想再显示状态栏文本,可使用Application.StatusBar = False语句关闭状态栏显示,也可以在程序开始将原先的状态栏设置存储,如使用语句oldStatusBar = Application.DisplayStatusBar将状态栏原来的信息存储在变量oldStatusBar,在程序运行完成或退出时,将变量重新赋值给状态栏,如使用语句Application.DisplayStatusBar = oldStatusBar,以恢复状态栏原状。

VBA操作文本文件

转载]VBA使用FileSystemObject将读取或写入文本文件 (2011-04-28 08:47:34) 转载▼ 标签: 转载 原文地址:VBA使用FileSystemObject将读取或写入文本文件作者:添成VBA使用FileSystemObject将读取或写入文本文件 原文链接: https://www.doczj.com/doc/7e12661508.html,/?viewspace-662523 https://www.doczj.com/doc/7e12661508.html,/?viewspace-662526 https://www.doczj.com/doc/7e12661508.html,/wengene/archive/2010/08/12/5806500.aspx 在网上找到一样的版本,所以就都列在这里 ********************************************************************* ************** *************************** 正文 ******************************** ************** ********************************************************************* ************** 有时,我们需要将一个文本文件中的数据读取到Excel单元格中,或将指定单元格的内容按指定的格式导出到文本文件中,这时,我们就需要使用 Scripting.FileSystemObject对象来进行操作。在接下来的几篇里我们介绍如何使用FileSystemObject对象操作文本文件的。工欲善其事,必先利其器,那么我们就先花几篇文章来详细介绍下FileSystemObject对象。 一、如何创建FileSystemObject对象 在VBA中,是通过CreateObject函数返回FileSystemObject对象。 示例:

使用VBA操作文件

使用VBA操作文件(4):FileSystemObject对象 使用VBA操作文件(4):FileSystemObject对象 FileSystemObject对象位于File System对象模型的最高层,并且是该层次中惟一可以在外部创建的对象,也就是说它是惟一能使用New关键字的对象。 FileSystemObject对象有许多用来操作文件系统的方法和属性。下面先看一个例子,如下面的代码: Sub FileInfo() Dim fs As Object Dim objFile As Object Dim strMsg As String Set fs = CreateObject("Scripting.FileSystemObject") Set objFile = fs.GetFile("C:\Windows\System.ini") strMsg = "文件名:" & https://www.doczj.com/doc/7e12661508.html, & vbCrLf strMsg = strMsg & "硬盘:" & objFile.Drive & vbCrLf strMsg = strMsg & "创建日期:" & objFile.DateCreated & vbCrLf strMsg = strMsg & "修改日期:" & objFile.DateLastModified & vbCrLf MsgBox strMsg, , "文件信息" End Sub FileInfo过程首先使用CreateObject函数创建一个FileSystemObject对象,用来访问计算机的文件系统。然后,使用GetFile方法创建一个File对象并返回对System.ini文件的引用。接着,利用File对象的Name属性、Drive属性、DateCreated属性、DateLastModified属性返回文件的相应信息。 下面详细介绍FileSystemObject对象的方法和属性。 BuildPath方法 其语法为: oFileSysObj.BuildPath (Path,Name)

VBA文件及文件夹操作

VBA文件及文件夹操作 1.VBA操作文件及文件夹 on error resume next下测试 A,在D:\下新建文件夹,命名为folder 方法1:MkDir "D:\folder" 方法2:Set abc = CreateObject("Scripting.FileSystemObject") abc.CreateFolder ("D:\folder") B,新建2个文件命名为a.xls和b.xls Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:\folder\a.xls" ActiveWorkbook.SaveAs Filename:="D:\folder\b.xls" C,创建新文件夹folder1并把a.xls复制到新文件夹重新命名为c.xls MkDir "D:\folder1" FileCopy "D:\folder\a.xls", "D:\folder1\c.xls" D,复制folder中所有文件到folder1 Set qqq = CreateObject("Scripting.FileSystemObject") qqq.CopyFolder "D:\folder", "D:\folder1" D,重命名a.xls为d.xls name "d:\folder1\a.xls" as "d:\folder1\d.xls" E,判断文件及文件夹是否存在 Set yyy = CreateObject("Scripting.FileSystemObject")

If yyy.FolderExists("D:\folder1) = True Then ... If yyy.FileExists("D:\folder1\d.xls) = True Then ... F,打开folder1中所有文件 Set rrr = CreateObject("Scripting.FileSystemObject") Set r = rrr.GetFolder("d:\folder1") For Each i In r.Files Workbooks.Open Filename:=("d:\folder1\" + https://www.doczj.com/doc/7e12661508.html, + "") Next G,删除文件c.xls kill "d:\folder1\c.xls" H,删除文件夹folder Set aaa = CreateObject("Scripting.FileSystemObject") aaa.DeleteFolder "d:\folder" 2.8excel vba一次性获取文件夹下的所有文件名的方法 小生今天上网下载了一个财务常用报表的文件包,里面有几百个excel工作表,要是手工一个一个的获得文件名的话,那我可是要忙十天半月哦。于是想到昨论坛就是vba论坛,昨不充分利用excel 自身的高级应用呀,呵呵,实现的代码如下,把工作量几天的任务可是一下子就完成了,这就是excel vba 给你工作提高效率的结果! excle vba自动获取同一文件夹下所有工作表的名称红色代码: 按Alt+F11,打开VBA编辑器,插入一个模块,把下面的代码贴进去,按F5执行 Sub t() Dim s As FileSearch '定义一个文件搜索对象

Excle VBA 操作调用文件方法总结

Excel-VBA操作文件方法总结 一、利用Excel对象来处理文件 (4) 1、打开Excel文件 (4) 2、打开文本文件 (4) 3、打开其他文件 (5) 4、保存文件 (6) 5、关闭文件 (6) 6、综合实例 (7) 7、总结 (8) 二、利用VBA文件处理语句来处理文件 (8) (一)文件处理 (8) 1、Name 语句 (8) 2、FileCopy 语句 (9) 3、Kill 语句 (9) 4、GetAttr 函数 (9) 5、SetAttr 语句 (10) 6、FileLen 函数 (10) 7、FileDateTime 函数 (10) (二)目录处理 (10) 1、CurDir 函数 (10) 2、ChDir 语句 (11) 3、ChDrive 语句 (11) 4、Dir 函数 (11) 5、MkDir 语句 (13) 6、RmDir 语句 (13) (三)处理文本文件 (13) 1、Open 语句 (13) 2、Close 语句 (14) 3、Reset 语句 (14) 4、FreeFile 函数 (14) 5、EOF 函数 (15) 6、LOF 函数 (15) 7、Loc 函数 (15) 8、Input # 语句 (15) 9、Write # 语句 (16) 10、Line Input # 语句 (17) 11、Input 函数 (17)

12、Print # 语句 (18) 13、Width # 语句 (19) (四)处理二进制文件 (19) 1、Put 语句 (19) 2、Get 语句 (20) 3、Seek 语句 (20) 4、Seek 函数 (21) (五)总结 (21) 三、利用FileSystemObject对象来处理文件 (21) (一)准备工作 (22) (二)FileSystemObject对象的方法 (22) 1、GetDrive 方法 (22) 2、GetDriveName 方法 (23) 3、GetExtensionName 方法 (23) 4、GetBaseName 方法 (23) 5、GetAbsolutePathName 方法 (23) 6、GetFile 方法 (24) 7、GetFileName 方法 (24) 8、GetFolder 方法 (24) 9、GetSpecialFolder 方法 (24) 10、GetParentFolderName 方法 (25) 11、GetTempName 方法 (25) 12、BuildPath 方法 (25) 13、CreateFolder 方法 (25) 14、CopyFolder 方法 (25) 15、MoveFolder 方法 (26) 16、DeleteFolder 方法 (27) 17、FolderExists 方法 (27) 18、DriveExists 方法 (27) 19、FileExists 方法 (27) 20、CreateTextFile 方法 (27) 21、OpenTextFile 方法 (28) 22、CopyFile 方法 (28) 23、MoveFile 方法 (28) 24、DeleteFile 方法 (29) (三)处理驱动器 (29) (四)处理文件夹 (30) 1、获取文件夹的信息 (30) 2、Folder对象的方法 (30) ⑶Delete 方法 (31) ⑷CreateTextFile 方法 (31)

在VBA中对名称的基本操作

在VBA中对名称的基本操作 (1) 创建名称 ①可以使用下面的代码在当前工作簿中创建名称: https://www.doczj.com/doc/7e12661508.html,s.Add Name:="MyName", RefersToR1C1:="=Sheet1!R2C2:R6C4"或者https://www.doczj.com/doc/7e12661508.html,s. Add Name:="MyName", RefersTo:="=Sheet1!$B$2:$D$6" 上面的代码在当前工作簿中将工作表Sheet1内的区域B2:D6命名为MyName,该名称为全局名称。在所命名的名称中不能出现空格和单元格引用,并且,如果对命名区域使用A1样式的引用,则最后使用绝对引用,否则所命名的区域将会不确定。 在所命名的名称前加上工作表名,则创建局部名称,如: https://www.doczj.com/doc/7e12661508.html,s.Add Name:="Sheet1!MyName1", RefersTo:="=Sheet1!$B$2:$D$6" 上面的代码在工作表Sheet1中命名区域B2:D6为MyName1,该名称为局部名称。 也通过引用指定工作表来创建局部名称,如: Worksheets("sheet2").Names.Add Name:="MyName2", RefersTo:="=Sheet2!$A$1:$B$3" 上面的代码在工作表Sheet2中创建一个局部名称MyName2,代表Sheet2中的单元格区域A1:B3。 ②一种简单的命名方法。例如: Worksheets("Sheet1").Range("B8:C10").Name = "MyName3" 上面的代码将工作表Sheet1中的单元格区域B8:C10命名为MyName3,为全局名称。 Worksheets("Sheet2").Range("H15:G16").Name = "Sheet2!MyName4" 上面的代码将工作表Sheet2中的单元格区域H15:G16命名为MyName4,为局部名称。 注意,这种方法只能应用于命名单元格区域,不能够用来命名公式、数字等。 ③在当前工作表中命名局部区域,该区域为其它工作表中的单元格区域。 Worksheets("Sheet1").Range("E6:F8").Name = "Sheet2!MyName5" 或者: Worksheets("sheet2").Names.Add Name:="MyName5", RefersTo:="=Sheet1!$E$6:$F$8" 上面的代码在工作表Sheet2中命名工作表Sheet1中单元格区域E6:F8为MyName5,该名称为Sheet2中的局部名称。

EXCEL VBA工作表操作全能方法小结

EXCEL VBA工作表操作全能方法小结 [示例04-01]增加工作表(Add方法) Sub AddWorksheet() MsgBox "在当前工作簿中添加一个工作表" Worksheets.Add MsgBox "在当前工作簿中的工作表sheet2之前添加一个工作表" Worksheets.Add before:=Worksheets("sheet2") MsgBox "在当前工作簿中的工作表sheet2之后添加一个工作表" Worksheets.Add after:=Worksheets("sheet2") MsgBox "在当前工作簿中添加3个工作表" Worksheets.Add Count:=3 End Sub 示例说明:Add方法带有4个可选的参数,其中参数Before和参数After指定所增加的工作表的位置,但两个参数只能选一;参数Count用来指定增加的工作表数目。 -------------------------------------------------------------------------------- [示例04-02]复制工作表(Copy方法) Sub CopyWorksheet() MsgBox "在当前工作簿中复制工作表sheet1并将所复制的工作表放在工作表sheet2之前" Worksheets("sheet1").Copy Before:=Worksheets("sheet2") MsgBox "在当前工作簿中复制工作表sheet2并将所复制的工作表放在工作表sheet3之后" Worksheets("sheet2").Copy After:=Worksheets("sheet3") End Sub 示例说明:Copy方法带有2个可选的参数,即参数Before和参数After,在使用时两个参数只参选一。 -------------------------------------------------------------------------------- [示例04-03]移动工作表(Move方法) Sub MoveWorksheet() MsgBox "在当前工作簿中将工作表sheet3移至工作表sheet2之前" Worksheets("sheet3").Move Before:=Worksheets("sheet2") MsgBox "在当前工作簿中将工作表sheet1移至最后" Worksheets("sheet1").Move After:=Worksheets(Worksheets.Count) End Sub 示例说明:Move方法与Copy方法的参数相同,作用也一样。

VBA操作VBA代码本身

VBA操作VBA代码 dadaV20190409 '基本概念: '1、VBE对象:根对象,表示在VBA编辑器中存在的所有对象的最上层对象; '2、VBAproject对象: VBE编辑器中的工程; '3、VBComponents对象:表示工程中所有的部件集合,包括Excel对象、窗体、模块、类模块; '4、CodeModule 对象:表示部件中相关的代码; '(更具体详解请示参见Visual Basic 2010 开发参考)以下内容为程序具体内容,可直接复制至VBE运行。 '一、返回模块的行数、内容、过程名 '1.返回模块的行数 Sub 返回模块A中的总行数() MsgBox ThisWorkbook.VBProject.VBComponents("VBA操作VBA本身代码").CodeModule.CountOfLines '模块名称:"VBA操作VBA本身代码",根据自身情况修改End Sub Sub 返回过程test1中的总行数() MsgBox ThisWorkbook.VBProject.VBComponents("VBA操作VBA本身代码").CodeModule.ProcCountLines("test1", vbext_pk_Proc) 'ProcCountLines返回在过程声明之前的所有空行及注释行的计数,并且,如果该过程是一段代码模块的最后一个,那么此过程之后的所有空行也计入。 End Sub

Sub 返回过程test1中开始行数() MsgBox ThisWorkbook.VBProject.VBComponents("VBA操作VBA本身代码").CodeModule.ProcBodyLine("test1", vbext_pk_Proc) '模块名称:"VBA操作VBA本身代码",根据自身情况修改 End Sub 'vbext_pk_Get 指定一个返回属性值的过程 'vbext_pk_Let 指定一个赋值给属性的过程 'vbext_pk_Set 指定一个给对象设置引用的过程 'vbext_pk_Proc 指定所有过程除了Property 过程 '2.返回模块的内容 Sub 返回过程test1中的所有代码() Dim 开始行数, 总行数 With ThisWorkbook.VBProject.VBComponents("VBA操作VBA本身代码").CodeModule '模块名称:"VBA操作VBA本身代码",根据自身情况修改 开始行数= .ProcBodyLine("test1", vbext_pk_Proc) 总行数= .ProcCountLines("test1", vbext_pk_Proc) MsgBox .Lines(开始行数, 总行数) End With End Sub '3.返回过程名 Sub 返回第7行所在的过程名() '(程序运行错误,原因不明!) MsgBox ThisWorkbook.VBProject.VBComponents("VBA操作VBA本身代码").CodeModule.ProcOfLine(215, vbext_pk_Proc) '模块名称:"VBA操作VBA本身代码",根据自身情况修改 End Sub

Excel-VBA-操作-Word(入门篇)

Excel-VBA-操作-Word(入门篇)

本文的对象是:有一定Excel VBA基础,对Word VBA还没有什么认识,想在Excel 中通过VBA操作Word还有困难的人。 一、新建Word引用 需要首先创建一个对Word Application 对象的引用。在VBA中,工具-引用,选取“MicroSoft Word 11.0 Object Library”。 方法一、New Word.Application Dim Wordapp As Word.Application Set Wordapp = NewWord.Application Wordapp.Visible = True '可见 'Wordapp.ScreenUpdating =False '屏幕刷新 Dim WordD As Word.Document '定义word类 Set WordD = Wordapp.Documents.Add '新建文档 ‘Set WordD = Wordapp.Documents.open(filename)'打开文档…… WordD.Close '关闭文档 Set WordD = Nothing WordApp.Quit '退出Word对象 方法二、CreateObject Dim WordApp As Object Set WordApp =CreateObject("Word.Application") '新建Word对象‘后续操作及退出一样…… 方法三、GetObject 文件已打开的情况下,使用:SetWordD=GetObject(filename),可建立对文档的引用,如果文件没有打开,则还需要先用方法一或二来操作。 至于方法一和方法二的区别,在网上询问了一下,大师们的回答是: 方法一:前期绑定,好处是在对象后输入句点可以给出快速提示,因为需要先引用对象,所以容易出现版本兼容问题。 方法二:后期绑定,没有提示,根据运行代码机器上对象的版本创建对象,兼容性好。

excelvba分类汇总Excel中用VBA操作文件的方法汇总

excel vba 分类汇总 Excel中用VBA操作文件的方法汇总导读:就爱阅读网友为您分享以下“Excel中用VBA操作文件的方法汇总”资讯,希望对您有所帮助,感谢您对https://www.doczj.com/doc/7e12661508.html,的支持! Excel-VBA操作文件四大方法 Excel-VBA操作文件四大方法之一 在我们日常使用Excel的时候,不仅会用到当前Excel文件的数据,还经常需要访问其他的数据文件。这些数据文件可能是Excel文件、文本文件或数据库文件等。经常有朋友会问如何在vba代码里操作这些数据文件,本文就系统地介绍一下在Excel中应用VBA操作数据文件的方法。 本文主要介绍四种常用的方法: 1、利用Excel对象来处理文件; 2、利用VBA文件处理语句来处理文件; 3、利用FileSystemObject对象来处理文件; 1 4、利用API函数来处理文件。 当然对于数据库文件,还可以利用ADO,SQL的方法操作,不过论坛已经有前辈详细介绍过此类方法,本文就不再重复了。 一、利用Excel对象来处理文件 利用Excel对象自带的方法来操作文件是最方便,也是最简单的。 我们主要利用Workbooks集合和Workbook对象的方法来操作文件。 1、打开Excel文件 我们可以用Workbooks.Open方法打开一个Excel工作簿。 Workbooks.Open(FileName, UpdateLinks, ReadOnly,

Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad) 其中FileName是必选的参数,表示要打开的工作簿名,如果没有指定路径,则代表当前路径。另外14个是可选参数,除了密码参数,其他的一般很少用。具体的含义可以参看VBA的帮助。 例: Workbooks.Open “F:\test.xls” 可以打开F盘的test.xls文件。 2 2、打开文本文件 使用Open方法也可以打开文本文件,但建议使用 OpenText方法。此方法是载入一个文本文件,并将其作为 包含单个工作表的工作簿进行分列处理,然后在此工作表中 放入经过分列处理的文本文件数据。完整语法如下: Workbooks.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local) 关于以上参数的具体含义可以参看VBA的帮助,这里就 不重复了。在实际的编程中,一般无需对这些复杂的参数进 行处理。可以通过录制宏来得到打开一个文本文件的VBA 代码。具体方法就是选择―文件——打开‖,然后选择打开

excel vba延时操作

使用OnTime安排执行过程 你可能需要设计Excel工作簿定期并自动地运行一个过程。例如,你可能想每隔几分钟从数据源中更新数据。使用VBA,你能执行Excel应用程序的OnTime方法指令Excel在给定的时间去运行某过程。通过编写代码使程序自已调用OnTime方法,能使VBA代码定期自动执行。本篇文章描述处理这种情况的VBA过程。 介绍 OnTime方法要求指定日期和时间以及要运行的过程作为参数,重要的是要记住具体地告诉Excel什么时候运行这个过程而不是从当前时间的偏差。为了取消一个未执行的OnTime过程,你必须经过该过程计划要运行的确切的时间,你不能够告诉Excel取消下一个计划执行的过程。因此,建议将安排过程开始运行的时间存放在一个公共的(或全局)变量中,该变量作用于所有的代码。然后,你能使用所存储时间的变量去安排运行或取消事件。下面的示例代码存储了所运行过程的名称和重复执行的时间间隔在公共的常量中,当然这不是必需的。Public RunWhen As Double Public Const cRunIntervalSeconds = 120 ' two minutes Public Const cRunWhat = "The_Sub" 开始一个定时的过程 为开始这个过程,使用一个名为StartTimer的子程序。代码如下: Sub StartTimer() RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds) Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _ schedule:=True End Sub 将比当前时间多两分钟的日期和时间存放在RunWhen变量中,然后调用OnTime方法指令Excel何时运行cRunWhat过程。 “The_Sub”是一个字符串变量,Excel将在合适的时间运行该过程。下面是该过程代码示例: Sub The_Sub() ' ' your code here ' StartTimer End Sub 注意The_Sub子程序的最后一行调用了StartTimer过程,再次重复运行这个过程。并且当The_Sub过程下次被OnTime调用时,将再次调用StartTimer来重复执行它自已。这就是如何执行周期循环的方法。 停止一个定时的过程 有时,当关闭工作簿时或者满足某个条件时需要停止定时执行的过程。由于OnTime方法是Application对象的一部分,简单地关闭已创建事件的工作簿不会取消对OnTime的调用。一旦Excel自身保持运行,它将执行OnTime过程。 为了停止OnTime过程,必须对OnTime方法指定确切的时间,这就是我们将时间作为公共的变量存放在RunWhen中的原因。否则,没办法知道过程计划执行的确切时间。(所计划的时间像OnTime方法中的一把“钥匙”,如果没有它,就没有通往事件的入口) 下面是一个名为StopTimer的子过程,它将停止要执行的OnTime过程。 Sub StopTimer() On Error Resume Next Application.OnTime earliesttime:=RunWhen, _ procedure:=cRunWhat, schedule:=False End Sub

用VBA操作

用VBA操作Word(转) 在所有Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序,它还经常在自定义Office 解决方案中扮演重要的角色。开发人员用各种不同的方式使用Word,有一些方式很简单,而另一些极其复杂。无论涉及何种自定义解决方案,用Visual Basic for Applications (VBA) 处理Word 文档的基本方法都是一样的。在本栏目中,我将概括地介绍如何使用Word,并提供一些关于如何运用Range 对象处理Word 文档内容的详细资料。 理解基本方法 在Word 中,几乎所有的操作都要调用Document 对象本身或其内容。当您用VBA 操作Word 时,Document 对象表示一个打开的文档,而且所有的Document 对象都是Application 对象的Documents 集合的成员。 文档是一个由字符、单词、句子和段落组成的集合,字符组成单词,单词组成句子,句子组成段落,等等。因此,每一个Document 对象都具有Characters、Words、Sentences 和Paragraghs 四个集合。此外,每个文档具有一个包含一个或多个节的Sections 集合,每一个节都有一个包含该节页眉和页脚的HeadersFooters 集合。 注意:您可以在Microsoft Office 2000 开发人员对象模型指南(英文)中查阅完整的Word 对象模型。另外,您也可以使用对象浏览器和Microsoft Word Visual Basic 参考帮助来学习有关具体某个对象、属性、方法和事件的详细内容。 通过VBA 使用Word 时,Document 对象处于中心位置。如果您要打开文档或创建新文档,就要创建新的Document 对象。每个打开或新创建的文档均被添加至Documents 集合。具有焦点的文档称为活动文档,由ActiveDocument 属性表示。 Document 对象作为Documents 集合中的一个成员,您可以通过使用Document 对象的索引值(Document 对象在Documents 集合中的位置,1 是集合中的第一个文档)或名称来引用它。另外,您也可以使用ActiveDocument 属性来引用当前具有焦点的文档。例如,如果名为Policies.doc 的文档是唯一打开的文档,则以下三个对象变量将全部指向Policies.doc: Dim docOne As Word.Document Dim docTwo As Word.Document Dim docThree As Word.Document Set docOne = Documents(1) Set docTwo = Documents("Policies.doc") Set docThree = ActiveDocument 一般情况下不要使用Documents 集合中的索引值来引用文档,因为当其它文档打开或关闭时,某个特定文档的索引值可能会随之改变。通常,您可以通过使用ActiveDocument 属性或使用Documents 集合的Add 方法或Open 方法创建的Document 对象变量。以下示例显示了如何使用ActiveDocument 属性把一个地址添加到当前具有焦点的文档中: With ActiveDocument .Envelope.Insert Address:="Office Talk" _ & vbCrLf & "One Microsoft Way" & vbCrLf _

相关主题
文本预览
相关文档 最新文档