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

第42部分

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

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

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



因为文件C:test。txt已经存在于C盘,VB将显示错误信息:“文件已存在”,同样,如果你要重命名 
的文件不存在的话,就会出现“文件未找到”的错误信息。  
* 如果New_pathname已经存在,并且和Old_pathname不同,函数Name必要时将文件移动到新文件 
    夹并且更改它的名称。  
Name 〃C:System。1st 〃 As 〃D:test。txt〃   
因为文件test。txt在D盘的根目录下并不存在,VB将C:System。1st移动到指定的驱动盘,然而,并 

不重命名该文件。(译者:本段与上面的内容似乎矛盾,而且未能试验成功,未知是原书失误与否。 
读者应仔细验证)  
* 如果New_pathname和Old_pathname指向不同的目录,以及提供的文件名称相同,那么Name函数 
    将指定的文件移到新地址,不用更改文件名。  
Name 〃D:test。txt 〃 As 〃C:DOStest。txt〃   
上面的指令将test。txt移动到C盘下的DOS文件夹里。  
                                           135 

… 页面 152…

技巧8…1 你不能重命名开启的文件  
在重命名文件之前,你必须关闭该文件。文件名称里不能包含通配符“*”或者“?”。  

3。检查文件或文件夹是否存在(Dir 函数)  

Dir函数,返回文件或者文件夹名称,语法如下:  
Dir'(pathname'; attributes')'   
Dir函数的两个参数都是可选的,pathname是文件或文件夹名称,对于参数attributes,你可以下 
列常量或者数值之一:  
表8…1 文件属性  
    常量                      数值           属性名称  
    vbNormal                  0              Normal 普通文件  
    vbHidden                  2              Hidden 隐藏文件  
    vbSystem                  4              System 系统文件  
    vbVolume                  8              Volume label 卷标  
    vbDirectory               16             Directory or Folder 目录或文件夹  
  
Dir函数常用来检查某个文件或文件夹是否存在,如果不存在,那么就返回空字符串(””)。我们 
到立即窗口里试验几个Dir函数的练习:  
1。 在立即窗口,输入下述指令:  
?Dir(〃C:”; vbNormal)   
你一旦按下回车键,VB就会返回该文件夹下的第一个文件名。普通文件(vbNormal)就是除隐藏, 
卷标,目录,文件夹或系统文件之外的任何文件。  
要返回当前目录下的其它文件名称的话,就使用不带参数的Dir函数:  
?Dir (并且回车)  
2。 在立即窗口里输入下列指令,并且在你回车时检查其结果:  
mfile = Dir(〃C:”; vbHidden)   
?mfile   
mfile = Dir   
?mfile   
mfile = Dir   
?mfile   
3。 在立即窗口输入下述指令:  
If Dir(〃C:stamp。bat〃) = 〃〃 Then Debug。Print 〃文件未找到。〃   
因为stamp。bat文件不在C盘上,所以VB就在立即窗口里写下文本信息“文件未找到。”  
4。 在立即窗口输入下述语句,可以检查某文件是否存在于某驱动盘上:  
If Dir (〃C:Autoexec。bat〃) 〃〃 Then Debug。Print 〃该文件不在C盘上。〃   
函数Dir允许你在文件路径名中使用通配符——星号(*)代表多个字符,问号(?)代表单个字符: 
例如,要在WINDOWS文件夹中查找所有配置设置的文件,你可以查找所有的INI文件,如下:  
?Dir(〃C:WINNT*。ini〃; vbNormal)   
system。ini   
?dir WIN。INI   
?dir   
WINFILE。INI   
?dir control。ini   
?dir EQUIP32。INI   
?dir   
sxpwin32。ini   
下面显示的过程在立即窗口里写上了确定目录下的文件名称。函数LCase让文件名称显示为小写字 
母。  
1。 打开一新工作簿,并保存为Chap08。xls  

                                          136 

… 页面 153…

2。 切换到VB编辑器窗口并重命名VBA工程为FileMan  
3。 插入新模块,重命名为DirFunction  
4。 输入下述VBA过程:  
Sub MyFiles()   
Dim mfile As String   
Dim mpath As String   
mpath = InputBox(〃Enter pathname;e。g。; C:Excel〃)   
If Right(mpath; 1)  〃” Then mpath = mpath & 〃”   
mfile = Dir(mpath & 〃*。*〃)   
If mfile  〃〃 Then Debug。Print 〃Files in the 〃 & mpath _   
       & 〃folder〃   
       Debug。Print LCase(mfile)   
       If mfile = 〃〃 Then   
              MsgBox 〃No files found。〃   
              Exit Sub   
       End If   
       Do While mfile  〃〃   
              mfile = Dir   
              Debug。Print LCase(mfile)   
       Loop   
End Sub   
上面的过程myFiles向用户询问文件路径名。如果该路径结尾没有反斜杠,函数Right就会将反斜杠 
附加在路径名字符串上。接下来,VB在该确定的文件夹里搜索所有文件(*)。如果没有文件的话, 
就会有信息显示,如果文件存在,那么文件名就会被写入立即窗口。  
5。 在同一个模块里输入另外一个过程:  
Sub GetFiles()   
      Dim nfile As String   
      Dim nextRow As Integer     'next row index   
      nextRow = 1   
      With Worksheets(〃Sheet1〃)。Range(〃A1〃)   
          nfile = Dir(〃C:”; vbNormal)   
          。Value = nfile   
          Do While nfile  〃〃   
              nfile = Dir   
              。Offset(nextRow; 0)。Value = nfile   
              nextRow = nextRow + 1   
          Loop   
      End With   
End Sub   
过程GetFiles获取C盘根目录下的所有文件名并且将每个文件名写入工作表。  

4。获得文件修改的日期和时间(FileDateTime 函数)  

如果你的过程需要知道某文件的最后修改的时间的话,可以使用函数FileDateTime:  
FileDateTime(文件路径名)   
文件路径名是个字符串,明确你要用的文件,并且需要包括驱动和文件夹的名称。该函数返回某文 
件的日期和时间印记。日期和时间的格式取决于视窗控制面板的原始设置。  
我们在立即窗口里来练习使用该函数:  
1。 在立即窗口里输入:  
?FileDateTime(〃C:config。sys〃)   
回车后,VB返回下述格式的日期和时间  

                                          137 

… 页面 154…

5/4/2001 10:52:00 AM   
要分开获取日期和时间时,可以将函数FileDateTime作为函数DateValue或TimeValue的参数来使 
用。例如:  
?DateValue(FileDateTime(〃C:config。sys〃))   
?TimeValue(FileDateTime(〃C:config。sys〃))   
2。 在立即窗口里将下述语句在一行输入:  
If DateValue(FileDateTime(〃C:config。sys〃))《 Date then Debug。Print 〃This file was not  
modified today。”   
Date函数返回当前系统日期,也是视窗控制面板的日期/时间对话框里设定的。  

5。获得文件大小(FileLen 函数)  

如果你需要检查某文件是否能够存在某磁盘上,那么你应该按照下述方式使用FileLen函数:  
FileLen(文件路径名)   
FileLen函数一字节方式返回文件的大小。如果该文件已打开,那么VB将返回该文件最后一个保存 
时的大小。  
假设你想要获取Windows目录下进行配置设置的所有文件的总大小:  
1。 在当前工程里插入新模块,并重命名为FileLenFunction  
2。 在代码窗口了输入过程TotalBytesIni:  
Sub TotalBytesIni()   
      Dim iniFile As String   
      Dim allBytes As Long   
      iniFile = Dir(〃C:WINDOWS*。ini〃)   
      allBytes = 0   
      Do While iniFile  〃〃   
           allBytes = allBytes + FileLen(〃C:WINDOWS” & iniFile)   
            iniFile = Dir   
      Loop   
      Debug。Print 〃Total bytes: 〃 & allBytes   
End Sub   

6。返回和设置文件属性(GetAttr 函数和 SetAttr 函数)  

文件和文件夹具有类似“只读”,“隐藏”,“系统”和“档案”的特点。这些特点就是属性。可以使 
用GetAttr函数来获得文件或文件夹的属性。该函数的唯一参数就是文件或文件夹路径名:  
GetAttr(文件路径名)   
上面的函数返回一个整数,代表下面显示的常量中的一个或多个常量之和。  
表8…2 文件和文件夹属性  
    常量                        数值            属性名称  
    vbNormal                    0               普通文件(没有设置其它属性)  
    VbReadOnly                  1               不可修改的文件或文件夹  
    vbHidden                    2               在普通设置下不可见的文件或文件夹  
    vbSystem                    4               系统文件  
    vbDirectory                 16              对象为一个目录  
    vbArchive                   32              档案(在最后一次备份后,该文件被修改)  
  
要知道某文件是否具有上述的属性,可以使用AND运算符来比较GetAttr函数的结果和常量数值。如 
果函数返回一个非零数值,那么该文件或文件夹具有和你测试的属性一样的属性。  
C:MsDos。sys的属性是什么呢?你可以在立即窗口里快速获得:  
?getattr(〃C:MsDos。sys〃) AND vbReadOnly   
1   
?getattr(〃C:MsDos。sys〃) AND vbHidden   

                                           138 

… 页面 155…

2   
?getattr(〃C:MsDos。sys〃) AND vbSystem   
4   
?getattr(〃C:MsDos。sys〃) AND vbArchive   
32   
现在,我们来将这些信息一起放在一个过程里:  
1。 插入新模块,并重命名为GetAttrFunction  
2。 输入下述过程GetAttributes:  
Sub GetAttributes()   
      Dim attr As Integer   
      Dim msg As String   
      attr = GetAttr(〃C:MSDOS。SYS〃)   
      msg = 〃〃   
      If attr AND vbReadOnly Then msg = msg & 〃Read…Only (R)〃   
      If attr AND vbHidden Then msg = msg & Chr(10) & 〃Hidden (H)〃   
      If attr AND vbSystem Then msg = msg & Chr(10) & 〃System (S)〃   
      If attr AND vbArchive Then msg = msg & Chr(10) & 〃Archive (A)〃   
      MsgBox msg; ; 〃MSDOS。SYS〃   
End Sub   
3。  当你运行上面的过程时,你将看到如图8…1的信息框  

                  
图8…1 使用GetAttr函数可以获得任何文件的属性  
GetAttr函数的相反函数是SetAttr函数,它允许你设置一个文件或文件夹的属性。语法如下:  
SetAttr 文件路径名; 属性   
文件路径名确定你要设置的文件或文件夹,第二个参数,属性,是一个或多个你要设置的属性常量。 
参见表8…1本章前面介绍的常量清单。  
假设你有一个叫做“C:stamps。txt”的文件,并且要设置两个属性,“只读”和“隐藏”。在立即 
窗口里输入下述指令来设置文件属性(可以找个你硬盘上存在的文件来试验):  
SetAttr 〃C:stamps。txt〃; vbReadOnly + vbHidden   
技巧8…2 调用SetAttr语句  
你不能给打开的文件设置属性,在使用SetAttr函数之前,你必须关闭该文件。  

7。更改缺省文件夹或驱动器(ChDir 语句和 ChDrive 语句)  

使用ChDir语句,你可以轻易更改缺省文件夹,例如:  
ChDir Path  
在上面的语句中,Path是新的缺省文件夹名称。Path可以包含驱动器名称。如果Path没有包括驱动 
名称,那么缺省文件夹将会更改为当前驱动。当前驱动不变。  
假设缺省文件夹为“C:DOS”,语句:  
ChDir 〃D:MyFiles〃   
将缺省文件夹更改为“D:MyFiles”,然而,当前驱动仍然是C盘。  
要更改当前驱动的话,你就应该使用ChDrive语句,按如下

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

你可能喜欢的