《excel_vba_编程教程(完整版)》

下载本书

添加书签

excel_vba_编程教程(完整版)- 第50节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
语句允许你从一个打开的文件中读取数据到好几个变量,该函数如下所示:  
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 Integer   
      Open 〃C:My DocumentsFriends。txt〃 For Output As #1   
      lname = 〃Smith〃   
      fname = 〃Gregory〃   
      birthdate = #1/2/63#   
      s = 3   
      Write #1; lname; fname; birthdate; s   
      lname = 〃Conlin〃   
      fname = 〃Janice〃   
      birthdate = #5/12/48# s = 1   
      Write #1; lname; fname; birthdate; s   
      lname = 〃Kaufman〃   
      fname = 〃Steven〃   
      birthdate = #4/7/57#   
      s = 0   
      Write #1; lname; fname; birthdate; s   
      Close #1   
End Sub   
上面的过程打开文件C:My DocumentsFriends。txt来写入数据。因为该文件还不存在于你的硬盘 
上,所以VB就创建了一个全新的文件并写入三个记录。写入文件的数据储存在变量上。注意,这些 
字符串由双引号分隔,而生日则有井号包围起来了。  
当你使用Windows记事本打开文件Friends。txt是,你将看到下述输入:  
〃Smith〃;〃Gregory〃;#1963…01…02#;3   
〃Conlin〃;〃Janice〃;#1948…05…12#;1   

                                          147 

… 页面 164…

〃Kaufman〃;〃Steven〃;#1957…04…07#;0   
注意,Write #语句自动在每个数据之间插入逗号并且将行结束字符(Chr(13) & Chr(10))放在每行 
文本的后面,以至于每行新纪录都从新的行开始。在上面的例子里面,每行文本显示一条记录—— 
每条记录以姓开始,以同胞数目结束。  
如果你想要将数据显示在一列中,而不是用逗号分隔数据,那么就使用Print #语句。例如,如果 
将上面的程序DataEntry里的Write #语句用Print #语句代替的话,那么VB就会按下面的方式写入 
数据:  
Smith       Gregory      1/2/63      3   
Conlin      Janice       5/12/48     1   
Kaufman     Steven       4/7/57      0   
尽管Print #语句和Write #语句的语法一样,但是,Print #以一个准备打印的格式将数据写入顺 
序文件。清单里的变量可能用分号或者空格分隔。要打印多个空格的话,你就应该使用Spc(n)指令, 
这里n是空格数。类似地,要将数据输入到第五列的话,你就应该使用指令Tab(5)。  
我们来看一些格式例子:  
* 使用带逗号的Write #语句,往文件里输入空行  
Write #1;  
* 在第五列输入文本“fruits”  
Write #1; Tab(5); “fruits”  
* 用五个空格分隔开单词“fruits”和“vegetables”  
Write #1; “fruits”; Spc(5); “vegetables”  

20。操作随机文件  

当某文件包含结构数据时,就以随机模式打开它。以随机模式打开文件让你能够:  
* 同时读写  
* 快速访问某特别记录  
在随机文件里,所有记录都是等长度的,并且每条记录都有相同数目的固定大小区域。记录或者区 
域的长度必须在文件写入数据之前就确定。如果写入某区域的字符串长度小于该区域的大小,那么 
VB就会自动在该字符串后面加空格来填充区域。如果写入的文本比区域长度长的话,超出的字符就 
不会被写入。  
要知道如果操作随机文件,你现在就需要创建一个小数据库用作外语学习。该数据库将包含由两个 
区域组成的记录,储存英语词组和其外语等同语。  
技巧8…8 随机文件是什么?  
随机文件是储存的记录可以随机访问的文件,这意味着随机文件里的任何记录都可以读取,而不必 
读取它之前的每条记录。  

21。创建用户定义的数据类型  

除了第三章里介绍的内置数据类型之外,VB允许你在模块的上面使用Type…End Type语句定义一个 
非标准的数据类型。该非标准数据类型也经常成为用户自定义的数据类型。用户自定义数据类型可 
以包括各种数据类型(字符串,整型,日期等等)的内容。当你使用随机访问的文件时,你经常要 
创建一用户定义的变量,因为,该变量使你可以轻易地访问个别记录。  
1。 在当前工程里插入新模块并且重命名为RandomFiles  
2。 在模块上面,紧接着Option Explicit语句下面,输入下述类型定义:  
Option Explicit   
' define a user…defined type   
Type Dictionary   
      en As String * 16 ' English word up to 16 characters   
      sp As String * 20 ' Spanish word up to 20 characters   
End Type   
用户定义的名为Dictionary的类型包括两个声明为String(字符串)的项目,并且有特定的大小。 
成员en可以接受最多16个字符,第二个项目sp的大小不能超过20个字符。如果你将这两个成员的长 
度加起来,那么记录长度将为36(16+20)。如果模块了已经有了Option Explicit语句的话,你就 
                                          148 

… 页面 165…

不必再输入它了。  
3。 输入下面的过程EnglishToSpanish  
Sub EnglishToSpanish()   
     Dim d As Dictionary   
     Dim RecNr As Long   
     Dim choice As String   
     Dim totalRec As Long   
     RecNr = 1   
      'open the file for random access 打开文件作随机访问  
     Open 〃Translate。txt〃 For Random As #1 Len = Len(d)   
     Do   
           ' get t
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架