excel_vba_编程教程(完整版)-第46部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
这个数字写入立即窗口,指令Seek #1; randomNr在开启的文件中移动光标到变量randomNr明确的
记录处,在下来的指令读取找到的记录内容。要在打开的随机访问文件中读取数据,你必须使用Get
语句。指令:
Get #1; randomNr; d
告诉VB要读取的记录号码(randomNr)以及要读取数据的变量(d)。随机文件中的第一个记录在位
置1,第二个记录在位置2,依次类推。忽略记录号码会导致VB读取下一个记录。然后,用户定义的
类型字典的两个成员都被写入了立即窗口。函数Trim(d。en)和Trim(d。sp)将读取的记录前后可能含
有的空格。接下来,VB显示信息,提示用户提供显示单词的外语等同语。该单词赋予变量answer,
如果你按下Esc而不是点击确定的话,VB就会关闭文件并且接受程序,否则,VB将打印你的答案到
立即窗口,并且通知你,你的答案是否正确。当你要退出单词训练程序,随时可以按下Esc或者点
击对话框的取消按钮。
如果你决定继续并且点击了确定按钮,程序就会产生一个新随机号码,并且会找回一个英语单词并
且问你相对应的西班牙译语。
你可以修改该过程VocabularyDrill,因此你可以将每个不正确翻译的单词写到工作表。同样,你
也许想要将文件Translate。txt里的所有记录到写到工作表里,这样你就总可以知道你的字典内容。
你可以在本书带的CD里找到这两个程序。
图8…3 在记事本里打开随机文件的内容
图8…4 试图用Microsoft Excel打开随机文件的内容。注意,Excel正确的认识了原始的数据类型—
—随机文件里的数据是固定宽度的。
技巧8…10 随机文件的优势与劣势
不想顺序文件,随机文件里的数据可以被很快地访问,而且,这些文件在往里面写信息和读信息期
间不需要关闭文件。随机访问文件不必按顺序读写。因为它们的记录和区域都有固定的长度,不管
储存的字符有多少,使用的字节数总是一样的,因此,如果有些区域是空的或者比声明的区域短时,
151
… 页面 168…
就会浪费许多空间。
22。操作二进制文件
不象随机文件那样以固定长度储存数据,二进制文件是一些长度变化的记录的集合。例如,文件包
含的第一个记录可以使10个字节,第二个记录可以只有5个字节,而第三个却可以使15个字节。这
种储存数据的方法节省很多的硬盘空间,因为VB不需要在要储存的字符串后面加上多余的空格来确
保它们有相同的长度(象往随机文件里写数据那样),在二进制文件里没有空间浪费。这就不奇怪
二进制文件比前面所讲的两种文件占用的硬盘空间要少。正如随机文件,二进制文件也可以打开同
时进行读和写的操作。然而,因为二进制文件里的记录是不同长度的,所以,这些文件的操作是更
苦难一些的。要找回正确的数据的话,你就必须将每个区域和记录的大小信息储存起来。
你将使用下述四种语句来操作二进制文件:
* 使用Get语句来读取数据
* Put语句允许你往二进制文件输入新数据
* Loc语句返回所读的最后字节数(在随机文件里,Loc语句返回最后所读记录的数字)
* Seek语句将光标移动到文件中合时的位置。
为了快速掌握上面语句的使用,我们来打开立即窗口,并且将下面表格里左边的指令输入到立即窗
口。本练习的目的是在一个叫做MyData。txt文件里输入你的姓和名,然后再找回你输入的数据。
立即窗口输入代码 解释
Open 〃MyData。txt〃 For Binary As #1 打开文件“MyData。txt”作为文件编号1来作二
进制访问
MsgBox 〃Total bytes: 〃 & LOF(1) 显示打开文件的字节数(该文件现在为空)
fname = 〃Julitta〃 给变量fname赋值
ln = len(fname) 将储存于变量fname的字符串长度赋予变量In
Put #1; ; ln 将变量In的内容放置在二进制文件的下一个字
节
MsgBox 〃The last byte: 〃 & LOC(1) 显示最后一个字节的位置
Put #1; ; fname 在下一个位置放置变量fname的内容
lname = 〃Korol〃 给变量lname赋值
ln = len(lname) 将储存于变量lname的字符串长度赋予变量In
Put #1 ; ;ln 将变量In的数值输入到二进制文件的下一个字
节
Put #1;;lname 在下一个位置放置变量lname的内容
MsgBox 〃The last byte: 〃 & LOC(1) 显示最后一个字节的位置
Get #1;1; entry1 读取第一个字节位置的数值并将其赋予变量
entry1。
MsgBox entry1 显示变量entry1的内容
Get #1; ; entry2 读取下一个位置的数值并将其赋予变量
entry2。
MsgBox entry2 显示变量entry2的内容
Get #1; ; entry3 读取下一个位置的数值并将其赋予变量
entry3。
MsgBox entry3 显示变量entry3的内容
Get #1; ; entry4 读取下一个位置的数值并将其赋予变量
entry4。
MsgBox entry4 显示变量entry4的内容
Debug。Print 将所有数据打印在立即窗口
entry1;entry2;entry3;entry4
7 Julitta 5 Korol 立即窗口里显示的上条指令的结果
Close #1 关闭文件
152
… 页面 169…
注意,上面的质量可以在CD里的过程EnterAndDisplay里找到。
当往二进制文件输入数据时,请遵循下述指导:
* 在往二进制文件写入字符串之前,将该字符串的长度赋予一个整型变量,通常可以使用下述代
码块:
字符串长度 = Len(变量名称)
Put #1; ; 字符串长度
Put #1; ; 变量名称
* 当你从二进制文件读取数据时,先得读取该字符串长度,然后才是字符串内容。可以使用Get
语句和String函数来实现:
Get #1; ; 字符串长度
变量名称=String(字符串长度; 〃 〃)
Get #1; ; 变量名称
技巧8…11 二进制文件的优势与劣势
与顺序文件和随机文件相比,二进制文件是最小的,因为它使用变化长度的记录,可以保存硬盘空
间。和随机访问文件一样,你可以同时读写二进制文件。二进制文件的一个最大的不好之处就是你
必须要准确地知道你要找回或者要操作的数据是如何储存在文件里的。
23。操作文件和文件夹的时髦方法
在你的电脑上有一个被隐藏的宝贝叫做Windows Scripting Host(WSH视窗脚本主机),它允许你创
建一些程序,可以控制视窗操作系统和它的应用程序,以及从操作系统找回信息。WSH是一种ActiveX
控件,可以在文件Wshom。ocx里找到。如果你正在使用Windows 95,98,NT5。0,2000,XP或者IE4,
5或者6的话,该文件就会自动安装在Windows System32文件夹里面。
WSH是一种脚本语言。脚本语言是指可以自动运行的一套命令。可以使用mand Scripting Host
(Cscript。exe)从命令提示,或者使用Windows Scripting Host (Wscript。exe)从视窗直接创建或
者运行脚本。在本章接下来的本分,你将学习WSH如何和VBA结合工作的。
WSH有它自己的对象层次。使用CreatObject函数,你可以在VBA过程里引用WSH对象。在开始编写使
用WSH的VBA过程之前,我们来看看你将能控制的一些对象。
153
… 页面 170…
图8…5 WSH是一个ActiveX控件,用来创建一些进行简单或复杂操作的脚本,而这种工作在早前的
MS…DOS操作系统里是有Writing batch文件(。bat)来完成的
1。 在VB编辑器窗口,选择“工具”…“引用”
2。 在引用对话框,找到并选择Microsoft Scripting Runtime
图8…6 对Microsoft Scripting Runtime创建引用
3。 现在,按下F2打开对象浏览器
154
… 页面 171…
4。 在“所有库”的下拉列表里选择“Scripting”。你将看到WSH库里面的部分对象列表。WSH让你
轻易的获得一些问题的答案,例如“在哪个硬盘上我可以找到某个文件?”(GetDrive方法),
“某文件的扩展名是什么?”(GetExtensionName方法),“该文件最后一次修改在什么时候?”
(DateLastModified属性)以及“在给定的硬盘上存在某个文件夹或者文件吗?”(FolderExists
和FileExists方法)。
图8…7 创建对Microsoft Scripting Runtime的引用之后(见图8…6),对象浏览器显示了很多对象,
让你使用硬盘,文件夹,文件和其它内容。
24。使用 WSH 获取文件信息
WSH有个对象叫做FileSystemObject,该对象有好几种方法来操纵文件系统。我们来看看你如何获
取某个特定文件的信息:
1。 在当前工程里插入一新模块,并重命名为WSH
2。 在模块WSH里,输入下述过程FileInfo:
Sub FileInfo()
Dim fs As Object
Dim objFile As Object
Dim strMsg As String
Set fs = CreateObject(〃Scripting。FileSystemObject〃)
Set objFile = fs。GetFile(〃C:WINNTSystem。ini〃) ‘ 译 者 : 有 的 可 能 是
C:WindowsSystem。ini
strMsg = 〃File name: 〃 & _
objFile。Name & vbCrLf
strMsg = strMsg & 〃Disk: 〃 & _
objFile。Drive & vbCrLf
strMsg = strMsg & 〃Date Created:〃 & _
155
… 页面 172…
objFile。DateCreated & vbCrLf
strMsg = strMsg & 〃Date Modified:〃 & _
objFile。DateLastModified & vbCrLf
MsgBox strMsg; ; 〃File Information〃
End Sub
上面显示的过程FileInfo使用VBA函数CreateObject来创建一个ActiveX对象(FileSystemObject),
该对象提供访问电脑文件系统的路径
Dim fs As Object
Set fs = CreateObject(〃Scripting。FileSystemObject〃)
上面的代码声明了一个对象变量,名为fs。然后使用函数CreateObject创建一个ActiveX对象并且
将该对象赋予对象变量。上面程序的第二行代码
Set objFile = fs。GetFile(〃C:WINNTSyst