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

第43部分

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

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

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



要更改当前驱动的话,你就应该使用ChDrive语句,按如下格式:  
ChDrive 驱动   
 “驱动”是你将要设置的新的缺省驱动名称。例如,在立即窗口里输入下述指令将缺省驱动设置为 
D驱或者E驱:  

                                          139 

… 页面 156…

ChDrive 〃D〃   
或者  
ChDrive 〃E〃   
如果你指向一个并不存在的驱动,你就会看到一个信息框“设备不可用”  

8。创建和删除文件夹(MkDir 语句和 RmDir 语句)  

依照下面的MkDir语句语法,你可以创建一个新文件夹:  
MkDir Path   
Path明确你要创建的新文件夹名称。如果你没有写驱动器的名称的话,VB就将在当前的驱动上创建 
新文件夹。现在,我们来看几个例子:  
1。 在立即窗口里输入指令,在C盘上创建一个叫“Mail”的文件夹:  
MkDir 〃C:Mail〃  
2。 将缺省文件夹更改为“C:Mail”:  
ChDir 〃C:Mail〃  
3。 获取当前文件夹名称:  
?CurDir   
使用RmDir函数来删除不需要的文件夹。该函数的语法如下:  
RmDir Path   
Path明确你要删除的文件夹名称。Path可以包含驱动名称,如果你忽略了驱动名称,那么VB就会试 
图删除当前驱动下的相同名称的文件夹,如果存在的话;否则,VB将显示错误信息:“路径未找到”  
4。 删除刚才创建的文件夹C:Mail:  
RmDir 〃C:Mail〃  
技巧8…3 RmDir移除空文件夹  
如果文件夹里有东西,你不可以删除它(使用RmDir)。你应该先用Kill语句删除这些文件(在本章 
后面讨论)  

9。复制文件(FileCopy 语句)  

使用FileCopy语句,可以在文件夹之间复制文件:  
FileCopy 来源; 目的地  
该语句的第一个参数是文件来源,明确你要复制的文件名称,该名称可以包含驱动名称。第二个参 
数是复制的目的地,可以包括驱动和文件夹的地址。两个参数都是必须的。假设你要将用户确定的 
一个文件复制到一个叫做“C:Abort”的文件夹,下面的过程示范如何完成它:  
Sub CopyToAbort()   
      Dim folder As String   
      Dim source As String   
      Dim dest As String   
      Dim msg1 As String   
      Dim msg2 As String   
      Dim p As Integer   
      Dim s As Integer   
      Dim i As Long   
      On Error GoTo ErrorHandler   
      folder = 〃C:Abort〃   
      msg1 = 〃The selected file is already in this folder。〃   
      msg2 = 〃was copied to〃   
      p = 1   
      i = 1  
      ' get the name of the file from the user 从用户处获取文件名称  
      source = Application。GetOpenFilename   
      ' don’t do anything if cancelled 如果取消则不进行任何操作  
      If source = 〃False〃 Then Exit Sub   
                                           140 

… 页面 157…

      ' get the total number of backslash characters 〃” in the source 获取文件来源字符 
      串中的反斜杠数  
      ' variable’s contents   
      Do Until p = 0   
           p = InStr(i; source; 〃”; 1)   
           If p = 0 Then Exit Do   
           s = p   
           i = p + 1   
      Loop   
      ' create the destination file name 创建目的文件名称  
      dest = folder & Mid(source; s; Len(source))   
      ' create a new folder with this name 创建同名文件夹  
      MkDir folder   
      ' check if the specified file already exists in the 检查该文件是否在目的地已经存 
      在  
      ' destination folder   
      If Dir(dest)  〃〃 Then   
           MsgBox msg1   
      Else   
      ' copy the selected file to the C:Abort folder 复制所选文件到文件夹“C:Abort”  
      FileCopy source; dest   
      MsgBox source & 〃 〃 & msg2 & 〃 〃 & dest   
      End If   
      Exit Sub   
ErrorHandler:   
      If Err = 〃75〃 Then   
           Resume Next   
      End If   
      If Err = 〃70〃 Then   
           MsgBox 〃You can’t copy an open file。〃   
           Exit Sub   
      End If   
End Sub   
过程CopyToAbort使用了Excel应用程序的方法GetOpenFilename从用户那里获取文件名称。该方法 
导致弹出内置的打开对话框。使用该对话框,你可以在任何驱动的任何文件夹里选择任何文件。如 
果用户取消了,VB就返回值“False”并且程序结束。如果用户选取了某个文件并且点击了打开, 
那么该选中的文件就会赋值到变量source。因为复制的目的,你只需要文件名称(而不需路径名), 
所以Do…Until循环用来找到最后一个反斜杠(“”)在变量source里的位置。  
接下来,VB给FileCopy语句的第二个参数准备了一个字母字符串,并且将其赋值到变量dest。该变 
量储存的字符串是目标文件夹(C:Abort)和用户指定的文件名前面加反斜杠连接起来的。函数 
MkDir创建了一个叫C:Abort的文件夹,如果它不存在于C盘上的话。如果这样的文件夹已经存在的 
话,那么VB就需要去处理错误75了。这个错误会被在程序后面的错误处理代码捕获。注意,错误处 
理器是一代码片断,它用ErrorHandler带冒号标志。  
当VB遇到Resume Next语句时,就会继续执行过程里面导致错误的代码行下面的代码。这意味着语 
句MkDir folder不会被执行。在这之后,程序将检查被选择的文件是否已经存在于目的文件夹。如 
果文件在那,那么用户将收到储存于变量msg1里面的信息;如果文件不存在于目的文件夹并且该文 
件当前没有打开的话,VB就会将文件复制到指定的文件夹,并且用相应的信息通知用户。如果该文 
件被打开了,VB将遇到运行时间错误70,并且因此而运行ErrorHandler里面的相应指令。  
1。 在一名为FileCopyStatement的信魔窟里输入过程CopyToAbort  
2。 运行该程序几次,从不同的文件夹里选择文件  

                                          141 

… 页面 158…

3。 试着复制该程序之前复制过的文件到文件夹C:Abort  
4。 打开某个文件,并且在其开着的情况下试图用过程CopyToAbort来复制它  
5。 运行本章前面准备的过程MyFiles,在立即窗口里列出文件夹C:Abort里面的内容  
注意,不要删除文件夹C:Abort和你复制的文件,你将在下一节里面使用一个叫RemoveMe的VBA过 
程来同时删除文件和文件夹。  

10。删除文件(Kill 语句)  

你已经从前面的章节里知道了不能删除含有文件的文件夹,要从文件夹里面删除文件的话,可以使 
用下面的Kill语句:  
Kill 文件路径名  
文件路径名明确一个或多个你要删除的文件的名称,随你意,也可以将驱动器和文件夹名称包括在 
里面。你可以在文件路径名参数里使用通配符(*或?)来确保快速删除文件。你不能删除开启的文 
件。  
如果你是跟着前面的练习一步一步过来的,那么你的硬盘上应该有了文件夹C:Abort和好几个文件 
了里面了。在下面的练习里,你将首先删除文件夹Abort里面的所有文件,然后再删除文件夹本身:  
1。 在当前工程里插入新模块,并重命名为KillStatement  
2。 在过程RemoveMe里输入代码,如下所示:  
Sub RemoveMe()   
      Dim folder As String   
      Dim myFile As String   
       ‘assign the name of folder to the folder variable   
       ‘notice the ending backslash 〃”   
      folder = 〃C:Abort”   
      myFile = Dir(folder; vbNormal)   
      Do While myFile  〃〃   
          Kill folder & myFile   
          myFile = Dir   
      Loop   
      RmDir folder   
End Sub   
3。 运行过程RemoveMe,当程序运行结束,点击Windows文件浏览器看看该文件夹是否已经被删除了。  

11。从文件读取和写入数据(Input/Output)  

你已经从前面的章节里知道了如何使用VBA打开一个电子表格,例如指令:  
Application。Workbooks。Open Filename:= 〃C:ExcelReport。xls〃   
打开位于文件夹C:Excel里面的文件Report。xls。除了使用专门的应用程序打开文件之外,你如果 
也想要创建VBA过程能够打开其它类型的文件并使用它们的内容的话,你就应该学习一些关于被称 
为低级别的文件I/O(input/output)。接下来关于顺序,随机和二进制文件的章节将会带你直接接 
触你的数据。  

12。文件访问类型  

计算机使用的文件类型有三种:  
* 顺序访问文件是指按储存相同的顺序找回数据的文件。例如以CSV格式(逗号分割文本),TXT 
    格式(以Tab键分割的文本)或者PRN格式(以空格分隔的文本)储存的文件。顺序文件访问经 
    常用来写文本文件,例如错误日志,参数设定和报告。顺序文件有下列模式:Input; Output 和  
    Append。模式决定了文件打开后你如何使用它。  
* 随机访问文件是文本文件,它的数据以同等长度储存并在一个以逗号分割的区域了。随机访问 
    文件只有一个模式——Random  
* 二进制访问文件是图形文件和其它非文本文件。二进制文件只能够在Binary模式下访问。  

                                           142 

… 页面 159…

13。使用顺序文件  

你的电脑硬盘上有成百上千的顺序文件。参数文件,错误日志,HTML文件以及所有类型的无格式文 
本文件都是顺序文件。这些文件以字母顺序在硬盘上储存。新文本行的开始以两个专门的字符表示, 
一个叫做carriage return (回车),另一个叫line feed(换行)。当你使用顺序文件时,你从文 
件的开头始,一个字符一个字符的向前移动,一行接一行,直到文件的结尾。顺序文件容易打开和 
操作,任何文本编辑器都可以。  
技巧8…4 什么是顺序文件?  
顺序文件就是访问它里面的记录时必须按它占据的顺序进行的文件,这意味着在你想访问第三个记 
录之前,你必须先访问第一个记录,接着是第二个记录。  
技巧8…5 使用Open语句打开文件  
当你使用顺序访问来打开一个文件时,该文件必须是已经存在的。  

14。读取储存于顺序文件里的数据  

我们来用一个已经在你电脑上的顺序文件并且在Excel VB编辑器窗口直接使用VBA来读取它的内 
容。要从一个文件读取数据,你就必须先使用Open语句打开该文件。这是它的语法:  
Open pathname For mode 'Access access''lock' As '#'filenumber 'Len=reclength'   
Open语句有三个必须的参数,它们是pathname; mode; 和 filenumber。上面的语法里,这三个参 
数前面都有用粗体显示的关键字。  
* Pathname是你要打开的文件名称  
* Pathname可以包括驱动器和文件夹名称  
* Mode是个决定文件如何打开的关键字。顺序文件可以以下列模式之一来打开:Input; Output 或 
    Append。使用Input读文件,Output写文件,将覆盖任何存在的文件,以及Append来写入文件, 
    同时附加上任何已经存在的信息。  
* Access是决定决定文件读写的关键字,Access可以是:Shared(共享),Lock Read(锁定读), 
    Lock Write(锁定写)或Lock Read Write(锁定读写)。  
* Lock决定了哪些文件的操作是允许其它过程进行的。例如,如果某文件是在网络环境下打开的, 
     “锁定”决定了其他人如何访问它。下述锁定关键字是可以用的:Read; Write 或者 Read Write。  
* Filenumber是从1到511的数字,该数字用来指向顺序操作中的文件。通过使用VB内置函数 
    FreeFile,你可以获得一个唯一的文件号码。  
*

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

你可能喜欢的