靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第44部分

excel_vba_编程教程(完整版)-第44部分

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



* Filenumber是从1到511的数字,该数字用来指向顺序操作中的文件。通过使用VB内置函数 
    FreeFile,你可以获得一个唯一的文件号码。  
* Open语句里的最后一个成员reclength明确顺序文件里总字符数,或者是随机文件里记录大小。  
考虑一下前面的例子,为了读取数据,要打开C:Autoexec。bat或者其它顺序文件,你应该使用下 
面的指令:  
Open 〃C:Autoexec。bat〃 For Input As #1   
如果某文件已经打开输入了,那么从它读取数据。在打开一格顺序文件后,你就可以使用下面的语 
句读取它的内容:Line Input #或者 Input # 或者使用Input 函数。  

15。逐行读取文件  

使用下面的语句来逐行读取Autoexec。bat或者其它任何顺序文件里的内容:  
Line Input #filenumber; variableName   
#filenumber是用Open语句打开文件时使用的数字,variableName是个String或者Variant变量,用 
来储存读取的行。  
Line Input #语句仅读取一开启顺序文件里的一行并且储存在一变量里。记住,Line Input # 语 
句一次读取顺序文件里的一个字符,直到它遇到回车字符(Chr(13))或者回车…换行字符(Chr(13)  
& Chr(10))。这些字符(回车,换行)在读取过程中返回的文本里是会忽略掉的。  
接下来的过程ReadMe示范如何使用Open和Line Input #语句逐行读取Autoexec。bat文件的内容。试 
试用同样的方法来读取其它顺序文件。  
1。 在当前工程里面插入新模块并重命名为SeqFiles  
2。 输入下列过程ReadMe:  
Sub ReadMe()   
      Dim rLine As String   

                                            143 

… 页面 160…

      Dim i As Integer ' line number   
      i = 1   
      Open 〃C:Autoexec。bat〃 For Input As #1   
      ' stay inside the loop until the end of file is reached   
      Do While Not EOF(1)   
           Line Input #1; rLine   
           MsgBox 〃Line 〃 & i & 〃 in Autoexec。bat reads: 〃 _   
           & Chr(13) & Chr(13) & rLine   
           i = i + 1   
      Loop   
      MsgBox i & 〃 lines were read。〃   
      Close #1   
End Sub   
3。 按下F8,逐句运行该过程  
为了读取内容,过程ReadMe将文件Autoexec。bat在模式Input里作为文件号码1打开。Do…While循 
环告诉VB一直执行循环里面的语句,直到到达文件结尾。文件的结尾由函数EOF的结果决定。  
EOF函数当下个要读取的字符已经过了文件结尾时,返回逻辑值True。注意,EOF要求一个参数—— 
你要检查的打开了的文件号码,是前面Open语句使用的同一个数字。使用EOF函数来确保VB不会超 
出文件结尾处。  
Line Input # 语句将每行内容储存于变量rLine里,然后,信息框显示行号和它的内容。之后如果 
函数EOF的结果还是为假(还未到达文件结尾处)的话,VBA给行计数器增加1,并且开始读取下一 
行。当函数EOF结果为真是,VB就会退出循环。在VBA结束前,还会再运行两条语句,显示读取行的 
总数,以及关闭该打开的文件。  

16。从顺序文件中读取字符  

假设你的程序需要检查文件Autoexec。bat里出现了多少个冒号,你可以使用函数Input来返回特定 
的字符数,而不必读取整行。接下来,If语句用来比较获取的字符和你寻找的字符。在写过程之前, 
我们来看看函数Input的语法:  
Input(number; '#'filenumber)   
Input函数的两个参数都是必须的,number明确你要读取的字符数,而filenumber是Open语句用来 
打开文件的同一个数字。Input函数返回所有读取的字符,包括逗号,回车,文件结束字符,引号 
和前导空格。  
1。 在SeqFile模块里输入下述过程Colons:  
Sub Colons()   
      Dim counter As Integer   
      Dim char As String   
      counter = 0   
      Open 〃C:Autoexec。bat〃 For Input As #1   
      Do While Not EOF(1)   
           char = Input(1; #1)   
           If char = 〃:〃 Then   
           counter = counter + 1   
           End If   
      Loop   
      If counter  0 Then   
           MsgBox 〃Characters found: 〃 & counter   
           Else   
           MsgBox 〃The specified character has not been found。〃   
      End If   
      Close #1   

                                          144 

… 页面 161…

End Sub   
2。 逐句执行该过程  
3。 将冒号换成其它你想寻找的字符并且重新执行该程序。Input函数允许你返回顺序文件的任何字 
    符。如果你使用VB函数LOF作为Input函数的第一个参数时,你将能够快速地读取顺序文件里的 
    内容,而不需要在整个文件上循环。LOF函数返回一个文件上的字节数。每个字节对应了文本文 
    件里的一个字符。过程ReadAll将文件System。ini的内容读取到立即窗口里:  
Sub ReadAll()   
      Dim all As String   
      Open 〃C:WINNTSystem。ini。bat〃 For Input As #1   
      all = Input(LOF(1); #1)   
      Debug。Print all   
      Close #1   
End Sub   
除了将文件内容打印到立即窗口之外,你还可以将其读取到一个文本框并且放置到工作表中去(见 
图8…2):  
Sub WriteToTextBox()   
      Dim mysheet As Worksheet   
      Set mysheet = ActiveWorkbook。Worksheets(1)   
      On Error GoTo CloseFile   
      Open 〃C:WINNTSystem。ini〃 For Input As #1   
      mysheet。Shapes(1)。Select   
      Selection。Characters。Text = Input(LOF(1); #1)   
      CloseFile:   
      Close #1   
End Sub   

                                                               
图8…2 文件TDate。ini(译者:原文为System。ini)的内容显示在工作表中的文本框里  
在你运行上面的程序之前,你得在工作表里画一个文本框。注意,On Error GoTo CloseFile语句 
激活错误捕捉,如果错误在程序的执行过程中发生了,就会立即跳到CloseFile标签处,Close #1 
语句无论有无错误发生都会被执行。  

17。读取分隔文本文件  

在某些文本文件中(文件通常保存为CSV;TXT或PRN格式)输入在每行的数据由逗号,Tab或者空格 
分隔。这种类型的文件用Input # 语句可以比前面介绍的Line Input #语句读取更快些。Input # 
语句允许你从一个打开的文件中读取数据到好几个变量,该函数如下所示:  
Input #filenumber; variablelist   
Filenumber是用Open语句打开文件时的同一个号码,variablelist是一个以逗号分开的变量清单, 

                                              145 

… 页面 162…

用来储存读取的的数据。你不能使用数组或对象变量,然而,你可以使用用户定义的变量(这种变 
量将在本章后面介绍)。  
下面的例子是一个用逗号分隔数据的顺序文件:  
Smith;John;15   
Malloney;Joanne;28   
Ikatama;Robert;15   
要读取该格式的文本的话,你必须给每个数据明确一个变量:姓,名和年龄。  
1。 打开一个新工作簿,并且输入下面的数据:  

                                                              
2。 将文件保存为CSV格式在C:Winners。Excel将显示信息告诉你,该格式文件不支持含有多个工 
    作表的工作簿。点击确定,只保存当前工作表。  
3。 输入下面的过程Winners:  
Sub Winners()   
      Dim lname As String; fname As String; age As Integer   
      Open 〃C:Winners。csv〃 For Input As #1   
      Do While Not EOF(1)   
           Input #1; lname; fname; age   
           MsgBox lname & 〃; 〃 & fname & 〃; 〃 & age   
      Loop   
      Close #1   
End Sub   
4。 在运行过程Winners之前,你要确保该文件在指定的路径下,或者在程序里指定文件Winners。csv 
    的正确位置。  
上面的程序打开文件Winners。csv读取数据,并且建立了一个Do…While循环,在整个文件里运行直 
到文件的结尾。Input #1语句用来将每行的内容读取到三个变量:lname; fname和age,然后,一 
个信息框将这三个变量的内容显示出来。程序最后关闭文件Winners。csv。  

18。往顺序文件里写数据  

当你要往一个顺序文件里写入数据时,你应该以Append或者Output模式打开该文件。这些模式的区 
别解释如下:  
* Append允许在一个现存文件的结尾处添加数据。例如,如果你以Append模式打开Readme。txt文 
    件,并且将文本“谢谢你阅读本文件”加到该文件,VB不会删除或者以任何方式改变该文件中 
    已经存在的文本,但是,会在文件的结尾处加上新的文本。  
* Output 当你以Output模式打开一个文件时,VB将会将文件里的现存的数据删除,而且,如果 
    该文件并不存在的话,就会创建一个全新的文件。例如,如果你以Output模式打开文件 
    Readme。txt,并且试图往里面写数据的话,那么以前储存在该文件里的文本就会被删除掉。如 
    果你在写入数据之前没有备份该文件的话,那该失误的代价将会是非常大的。如果你想要用新 
    数据取代整个内容的话,就应该以Output模式打开该已存在的文件。  
这里有些例子,什么时候应该用Append,什么时候用Output:  
* 要在文件C:Readme。txt后面添加新文本,按下面以Append模式打开该文本:  
Open 〃C:Readme。txt〃 For Append As #1   
* 要在一个叫C:Result。txt的全新文件里输入一些文本,那么以Output模式打开该文件:  
Open “C:Result。txt” For Output As #1  
* 要取代现存文件C:Winners。csv的内容,首先将原始文件备份一份,然后将原始文件以Output 

                                          146 

… 页面 163…

    模式打开:  
FileCopy 〃C:Winners。csv〃;〃C:Winners。old〃   
Open 〃C:Winners。csv〃 For Output As #1   
技巧8…6 不可同时读写  
顺序文件必须分别打开来执行读和写的操作,你不可以同时执行这些操作。例如,在一个文件已经 
打开并且写入数据后,该文件必须先关闭,之后才能再打开来读取数据。  
技巧8…7 顺序文件的优势和劣势  
尽管顺序容易创建和使用,并且不回浪费空间,但是它们也有很多不好的地方。例如,要是不读一 
大部分文件内容的话,你是很难找到某个特定项目的。同时,文件的个别项目不容易改变或删除— 
—你必须重新写入整个文件。在有,在技巧8…6例说的,顺序文件必须分开进行读和写的操作。  

19。使用 Write # 和 Print # 语句  

既然打开一文本文件来写入数据的两种方法(Append或Output)你都已经知道了,那么是时候学习 
Write #和Print #语句了,它们让你将数据发送到文件。当你使用Input #语句从一个顺序文件读 
取数据的时候,通常可以使用Write #语句往该文件写数据,如下所示:  
Write #filenumber; 'outputlist'  
Filenumber明确你正使用的文件的号码,它是Write #语句的唯一必须的参数。Outputlist是你要 
写入的文本。Outputlist可以是你要写入的单个文本字符,也可以是包含数据的变量清单。如果你 
只明确了文件号码,VB就会在打开的文件里写入一个空行。  
我们了准备一个文本文件,里面是三个人的名,姓,生日和兄弟姐妹的数目,演示数据是如何写入 
文件的:  
1。 在当前模块里输入过程DataEntry:  
Sub DataEntry()   
      Dim lname As String   
      Dim fname As String   
      Dim birthdate As Date   
      Dim s As In

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的