11. 脚本语言
比如对这个标题:
2.1 PAPRBY / RubyVerifoneDefaults
想要获得标题的序号,即2.1
可通过下列代码获得当前标题的序号,即2.1
Selection.Bookmarks("headinglevel ").Range.ListFormat.ListString
headinglevel是VBA里面的预定义标签
关于此内容的详细解释,请参考:[5]
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 赋值,则过程将返回一个缺省值:数值函数返回 0,字符串
函数返回一个零长度字符串 (""),Variant 函数则返回 Empty。
如果在返回对象引用的 Function 过程中没有将对象引用赋给 name (通过
Set),则函数返回 Nothing。
下面的示例说明如何给一个名为 BinarySearch 的函数赋返回值。
在这个示例中,将 False 赋给了该函数名,表示没有找到某个值。
Function BinarySearch(......) As Boolean
......
'值未找到,返回一个 False 值。
If lower > upper Then
BinarySearch = False
Exit Function
5
12. 脚本语言
End If
......
End Function
看懂后,多说一句,有问题,还是先找VBA的Help系统,比百度,google等,有时候更准
确,方便,易懂。
函数内部任何地方都可以出现[name = expression]
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语言等里面的字符串处理函数不同的,需要额外说明的,解释如下:
a.
Space, String
其中Space很方便,比如想要输出10个空格,当然你可以通过自己手动的写成"
space,用其更方便,直接写成
",但是有了
Space(10)
即代表了10个空格。同理
String(number,characterToRepeate)
用于输出多个某一字符,而对于前面的空格来说,也可以用string表示,即
Space(10)=String(10, 32)
其中32=0x20,是space的ASCII值。而String的优点在于,也可以输出其他字符,包括
0x0~0x1F之类不可见字符。
b. InStr, InStrRev
这个InStr,其实就是C语言的strstr
语法为:
InStr([start, ]string1, string2[, compare])
6
13. 脚本语言
意思为:"返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。"
而InStrRev意思和InStr类似,只不过是"从字符串的末尾算起"。
举例说明:
posOfPoint = InStr("abc.def", ".") ’ 查找"abc.def"中的".",返回值为4
c.
Asc, Chr
Asc是将字符转换为ASCII数值,Chr是将数值转换为ASCII字符。
举例为:
MyNumber = Asc("A") ' 返回 65。
MyChar = Chr(97) ' 返回 a。
d. 如何创建文件和输出信息到文件里面
在VBA中创建(log)文件的两种方法.
i.
方法1:
Function createFileTest()
' the name of the file to be output, including full path
Dim FileName As String
FileName = "D:create_file.txt"
' 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 "test string..."
file.Close
End Function
ii.
方法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:test_output.txt"
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.
7
14. 脚本语言
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 this file..."
Print #gFileNum, "Test done."
Close #gFileNum
End Sub
e. 如何获得当前文件的文件名 和 当前文件所在路径
i.
获得当前文件所在的路径:ActiveDocument.Path。
注意:所得结果,最后没有那个路径分隔符""
ii.
获得当前文件的文件名:ActiveDocument.Name
iii. 获得当前文件的路径和文件名,即全名:ActiveDocument.FullName
f.
VB里面的一些常量
office 2010的help文件里面已有总结:
Visual Basic 常数
Visual Basic for Applications 定义了一些常数,使程序设计变得更为简单。下
列常数可在程序代码中的任何地方代替实际值:
• Calendar 常数
• CallType 常数
• Color 常数
• Compiler 常数
• Date 常数
• Dir、GetAttr 和 SetAttr 常数
• IMEStatus 常数
• Instr、StrComp 常数
• Keycode 常数
• Miscellaneous 常数
• MsgBox 常数
• QueryClose 常数
• QueryClose 常数
• Shell 常数
8
15. 脚本语言
• StrConv 常数
• 系统颜色常数
• VarType 常数
• Visual Basic 常数
其中,此处打算把一些我所常用到的一些常数列出来,以供参考
Miscellaneous 常数
下列常数由 Visual Basic for Applications 中的类型库定义,可用来在代码中
的任何地方代替实际值
常数
等于
描述
vbCrLf
Chr(13)
Chr(10)
+ 回车符与换行符结合
vbCr
Chr(13)
回车符
vbLf
Chr(10)
换行符
vbNewLine
Chr(13)
+ 平台指定的新行字符;适用于当前平
Chr(10) or, on 台
the Macintosh,
Chr(13)
vbNullChar
Chr(0)
值为 0 的字符
vbNullString
值为 0 的字符串
用来调用外部过程;与长度为零的字
符串 ("") 不同
vbObjectError
-2147221504
用户定义的错误号应当大于该值,例
如:Err.Raise
Number
=
vbObjectError + 1000
vbTab
Chr(9)
Tab 字。
vbBack
Chr(8)
退格字符
vbFormFeed
Chr(12)
在 Microsoft Windows or on the
Macintosh 中没有作用
vbVerticalTab
Chr(11)
在 Microsoft or on the Macintosh
Windows 中没有作用
2.3.4. 授人鱼不如授人以渔
下面介绍一些更多有用的参考资料,以及介绍一下遇到问题如何去解决问题。
1. 通过VBA内置的Help系统查询不懂的内容
在word里面打开VBA编辑器编辑vba代码后,对于常见的一些对象,属性,方法(函数)等的具体
解释,多数都可以通过选择该对象/属性/方法,然后按F1键,打开帮助,其会自动跳转到对应的帮
助内容,很是方便,而且很多的细节,解释的也比较详细,可以多多利用。
其中都包括了一些基本知识的详细解释,比如上面提到的,关于VBA中关于Function的返回值,其
要去查看Help文件,就可以通过选择某函数,
比如,选中:
Function funcName()
'XXXXXX
9
30. 脚本语言
glossary.xml
images
Makefile
reference.xml
remove_bak.sh
remove_bak.sh.bak
cygwin中的tr在shell中工作不正常? -> 实际上是cygwin中
的显示有问题
不过,另外提及一下,目前遇到一个问题,就是上述的代码:
ls | tr " " "?"
放到shell中执行:
local sub_folders=`ls $input_folder | tr "32" "?"`;
echo '444 sub_folders='$sub_folders;
当时结果是tr无效,输出的效果中文件名中的空格没有被替换为问号。
其中当前环境是用的Cygwin,tr版本为:
CLi@PC-CLI-1 ~/develop/docbook/books/arm_vs_mips/src
$ tr --version
tr (GNU coreutils) 8.15
Packaged by Cygwin (8.15-1)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/
gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Jim Meyering.
后来终于经过一番折腾,而搞清楚了:
把问号换成其他的,比如<,>等:
local sub_folders=`ls $input_folder | tr "32" "<"`;
local sub_folders=`ls $input_folder | tr "32" ">"`;
也都是可以看到替换的结果的。
并且也可以用:
each_item=`echo $each_item | tr "<" " "`;
each_item=`echo $each_item | tr ">" " "`;
24
31. 脚本语言
再替换回来的。
而对于上述的问号替换空格,虽然没有显示出来,但是如果没有此操作的话,后面
for each_item in $sub_folders; do
所得到的每个item中,
arm_vs_mips.xml - Copy_bak
就会变成三个字符串:
arm_vs_mips.xml
Copy_bak
而有此操作,后面得到的就是一个独立的字符串:
arm_vs_mips.xml - Copy_bak
所以明白了根本原因是,Cygwin中,没有正确的显示出来,实际上,是已经替换成功
的了。
不过很悲催的是,单独echo问号字符,却又是可以正常显示的。。。
说实话,这样的bug,真的很让人崩溃。。。太浪费时间了。。。
2.7.2. Linux Shell参考资料
1. Linux Shell Scripting Tutorial - A Beginner's handbook
9
用经典的那句中文介绍此书就是,对于Linux Shell的"从入门到精通",^_^
专门提及一下常用的供参考的章节:
• test command or [ expr ]
10
2.8. Windows Batch File
2.8.1. Windows Batch File简介
2.8.2. Windows Batch File学习心得
2.8.3. Windows Batch File参考资料
1.
9
http://www.freeos.com/guides/lsst/index.html
http://www.freeos.com/guides/lsst/ch03sec02.html
10
25