【整理】word vba学习记录
Version:2011-01-06
Author: green-waste (at) 163
【看帖前必读】
1.此贴目的:只是为了记录最近在接触学习word vba的过程中,一些心得和体会或者是学习时候要注意的一些方面,特此记录,以备后差或他人借鉴。
2.看之前,读者最好具有基本的编程相关知识和基本的VB的基础,以便更好理解所说的内容。
3. 此贴所写内容,多为本人整理或自己的理解,如果有误,欢迎指正:green-waste (at) 163
【Word VBA学习记录】
1.什么是word vba?为何要用VBA?
什么是VBA?为什么要学习VBA?
=========
VBA是Visual Basic For Application的简称,换句话说,就是将VB应用于Application应用程序,此处的Application指的是微软的Excel,word等应用程序。所以,对于我用到的,在word里面写宏,去实现一些操作,用到的VB,就是Word VBA了。而其他常用的,还有Excel里面也会用到用宏去实现一些根据自己需求实现的一些功能,比如自动提取一些内容到一个文档中,否则,自己手动慢慢地复制粘贴,往往效率极低,累死你不说,还不容易保证完全正确,而通过宏来处理,运行一下宏,点击一下某个菜单等,即可实现要做的事情,高效,准确。
就像别人说的,除了“Excel本身的内置函数其实已经很强大了”,但是只是很强大,有些更高级或复杂的操作,还是宏实现起来更方便和快捷。
再简而言之,如果你不是需要对某(些)文档特殊处理,只是一般的使用word或excel文档,多数人都是用不到的。
而如果有类似于我这样的需求,将某个word文档中的很多表格中的符合某些特定条件的某些列的内容,经过一定条件判断,将对应的值提取到一个xml文档中,并且输出的时候,要将该值根据某些约定,再分成几个部分等等,这类的操作,手动实现,要一个个去对应的表格,然后到对应的值,然后手动复制,粘贴,一点点做,效率很低,而如果可以用宏实现,只需要写好宏代码,运行一下,即可省去大量的精力。
不过,再引用别人的,提示一下:“但有一点叶枫想要告诉大家,VBA功能很强大,但并不是万能的,也并不是所有工作都需要用VBA来解决,也并不是所有工作用VBA来解决都会很简单,这要根据实际情况而定,有些工作你用VBA来解决的话相反会变得很麻烦。”
2.不等于符号
VBA里面的不等于号,用<>表示,而不是其他C等语言里面的!=.。
<>,即大于号和小于号的组合,意思也很明确,既不大于也不小于,所以就是不等于了。
3。如何选中一行并获得对应的文字和wdMove和wdExtend的区别
前提,光标(或叫插入点)已经移动到该行了,但是想要选中该行,并想要获得对应所选Range的文字
此时可以用如下代码:
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
其中,wdLine是单位(Unit),类似的Unit还有:wdLine, wdParagraph,wdWindow,wdScreen。
WdExtend,对应的还有wdMode,对此,VBA教程的解释是:
“如果是wdMove,则所选内容折叠到结束位置,并向下移动。如果是wdExtend,则所选内容向下扩展。默认值为wdMove。”
没完全理解,但是经过测试得知,如果是mdMove,那就是光标移动到对应位置了,但是没有选择这(光标移动的)起点到终点,此处为整个这一行,的内容,如果是wdExtend,那就是不仅移动光标了,并且同时选中了起点到终点的内容。
4.如何跳转到某一标题和如何移动光标/插入点
Selection.GoTo What:=wdGoToHeading, Which:=wdGoToAbsolute, Count:=5
这里主要是利用Goto语句,wdGoToHeading说明掉转的单位是heading标题,wdGoToAbsolute表示是绝对位置的跳转,于此相对应的还有wdGoToAbsolute, wdGoToFirst, wdGoToLast, wdGoToNext, wdGoToPrevious, wdGoToRelative。更多详细内容,请参考附录“Word VBA 教程”。
另外,对于移动光标/插入点,可以借鉴如下做法:
'本示例将所选内容移至当前文字部分的开头。如果所选内容位于文档正文部分,则本示例将所选内容移至文档的开头。
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
其中wdStory属于wdUnits,其他类似的wdUnits,还有wdColumn,wdLine,wdRow等。
5. 如何获得选中的标题的序号
前提,已经选择某一标题了,想要获得该标题前面的序号
比如对这个标题:
2.1 PAPRBY / RubyVerifoneDefaults
想要获得标题的序号,即2.1.
Selection.Bookmarks("\headinglevel").Range.ListFormat.ListString '获得当前标题的序号,即2.1
其中\headinglevel是VBA里面的预定义标签。
关于此内容的详细解释,请参考:
【解决】word VBA中,获取当前所选内容的标题序号/标题数字/heading level/heading number
againinput4.blog.163/blog/static/1727994912011041136779/
6。如何返回函数的返回值
关于这点,网上,没几个说的很清楚的,最后还是通过VBA的Help才搞懂如何返回函数返回值的。此处,简单解释如下:
一个Function函数的语法为:
[Public | Private | Friend] [Static] Function name [(arglist)] [As type]
字符串函数怎么获取[statements]
[name=expression]
[Exit Function]
[statements]
[name=expression]
End Function
其中,函数内部任何地方都可以出现[name=expression],name即为函数名,expression是表达式,当然也可以是某个变量,常量等,其就代表了返回值。更具体额度解释和例子,摘录如下,很容易看懂的:
“要从函数返回一个值,只需将该值赋给函数名。在过程的任意位置都可以出现这种赋值。如果没有对name 赋值,则过程将返回一个缺省值:数值函数返回0,字符串函数返回一个零长度字符串(""),Variant函数则返回Empty。如果在返回对象引用的Function 过程中没有将对象引用赋给name (通过Set),则函数返回Nothing。
下面的示例说明如何给一个名为BinarySearch的函数赋返回值。在这个示例中,将False赋给了该函数名,表示没有到某个值。
Function BinarySearch(. . .) As Boolean
. . .
'值未到,返回一个 False 值。
If lower > upper Then
BinarySearch = False
Exit Function
End If
. . .
End Function"
看懂后,多说一句,有问题,还是先VBA的Help系统,比百度,google等,有时候更准确,方便,易懂。
7.字符换处理函数
关于VBA中的字符串相关的函数,刚发现,office 2010 中的VBA的help文件里面,有已经总结好的了:
字符串处理关键字总结
作用关键字
比较两个字符串。StrComp
变换字符串。StrConv
大小写变换。Format, LCase, UCase
建立重复字符的字符串。Space, String
计算字符串长度。Len
设置字符串格式。Format
重排字符串。LSet, RSet
处理字符串。InStr, Left, LTrim, Mid, Right, RTrim, Trim
设置字符串比较规则。Option Compare
运用ASCII 与ANSI 值。Asc, Chr
上述字符串处理相关的函数,多数都是见名知意,容易看懂和使用,但是也有些不太容易搞懂,或者和普通C语言等里面的字符串处理函数不同的,需要额外说明的,解释如下:
(1) Space, String:其中Space很方便,比如想要输出10个空格,当然你可以通过自己手动的写成“”,但是有了space,用其更方便,直接写成Space(10),即代表了10个空格。同理,
String(number,characterToRepeate)用于输出多个某一字符,而对于前面的空格来说,也可以用string表示,即Space(10)=String(10, 32),其中32=0x20,是space的ASCII值。而String的优点在于,也可以
输出其他字符,包括0x0~0x1F之类不可见字符。
(2) InStr, InStrRev:这个InStr,其实就是C语言的strstr,
语法为:
InStr([start, ]string1, string2[, compare])
意思为:
“返回Variant (Long),指定一字符串在另一字符串中最先出现的位置。”
而InStrRev意思和InStr类似,只不过是“从字符串的末尾算起”。
举例说明:
posOfPoint = InStr("abc.def", ".") ’ 查"abc.def"中的".",返回值为4
(3) Asc, Chr: Asc是将字符转换为ASCII数值,Chr是将数值转换为ASCII字符。举例为:
MyNumber = Asc("A") ' 返回65。
MyChar = Chr(97) ' 返回a。
8.如何创建文件和输出信息到文件里面
'------------------方法1------------------
Function createFileTest()
' the name of the file to be output, including full path
Dim FileName As String
FileName = "D:\"
' open the file ouput text stream output, overwritng is necessary
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Dim file As Object
Set file = fs.CreateTextFile(FileName, True)
file.WriteLine ""
file.Close
End Function
'------------------方法2------------------
Public gFileNum As Integer
Function createOutputFile()
Dim outputFileNameWithPath As String
Dim gDestFile As String
Dim outputFileNameWithPath As String
Dim openFileOK As Boolean
openFileOK = True
' 1. create an XML file
outputFileNameWithPath = "D:\" gDestFile = outputFileNameWithPath
' Obtain next free file handle number. gFileNum = FreeFile()
' Turn error checking off.
On Error Resume Next
' Attempt to open destination file for output. Open gDestFile For Output As #gFileNum
' If an error occurs report it and end.
If Err <> 0 Then
openFileOK = False
MsgBox "Cannot create file: " & gDestFile End If
' Turn error checking on.
On Error GoTo 0
createOutputFile = openFileOK
End Function
Sub createFileTest()
Print #gFileNum, "Test output string to " Print #gFileNum, "Test done."
Close #gFileNum
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论