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

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!

                                                                                           
图10…5 文件夹采集对话框允许用户选择一个路径,该对话框显示目录列表,并且标题显示为“浏 
览”  
文件对话框使用的常量列在下面的表格里,前缀“mso”表明这些常量都是Microsoft Office 对象 

                                           184 

… 页面 201…

模型里一部分。  
  
msoFileDialog常量             值  
msoFileDialogOpen             1  
msoFileDialogSaveAs           2  
msoFileDialogFilePicker       3  
msoFileDialogFolderPicker     4  
  
可以使用FileDialog的Filters属性来控制显示文件的类型。如果你打开文件打开对话框下面的“文 
件类型”下拉列表框时,你将看到许多可选择的文件过滤器。那里有24种预先设置好的文件过滤器, 
你也可以在该清单里添加你自己的过滤器。在立即窗口里输入下述语句,我们就可以得到缺省的文 
件过滤器数目了:  
set f = Application。FileDialog(msoFileDialogOpen)。Filters   
?funt   
FileDialog对象的过滤器储存在FileDialogFilters集合里面。我们来创建一个简单的过程,将缺 
省的文件过滤器返回到Excel工作表:  
1。 在当前VBA工程里插入一个新模块,并且重命名为DialogBoxes  
2。 在DialogBoxes代码窗口里输入下面显示的ListFilters过程:  
Sub ListFilters()   
      Dim fdfs As FileDialogFilters   
      Dim filt As FileDialogFilter   
      Dim c As Integer   
      Set fdfs = Application。FileDialog(msoFileDialogOpen)。Filters   
      Sheets(3)。Cells(1; 1)。Select   
      Selection。Formula = 〃List of Default Filters〃   
      With fdfs   
           c = unt   
           For Each filt In fdfs   
                 Selection。Offset(1; 0)。Formula = filt。Description & _   
                      〃: 〃 & filt。Extensions   
                 Selection。Offset(1; 0)。Select   
           Next   
           MsgBox c & 〃 filters were written to Sheet3。〃   
      End With   
End Sub   
该过程声明了两个对象变量,变量fdfs返回对FileDialog对象里的FileDialogFilters集合的引用, 
而对象变量filt则储存对对象FileDialogFilter的引用。FileDialogFilters集合的Count属性返回 
文件过滤器的总数。之后,过程遍历过滤器集合,并且找到每个过滤器的描述和扩展名。  
使用FileDialogFilters集合的Add方法,你可以轻易地将你自己的过滤器添加到缺省的过滤器中 
去。下面修改后代工程ListFilters2示范了如何将临时文件(*。tmp)过滤器添加到过滤器清单中 
去。该过程里的最后语句将打开文件打开对话框,因此你自己可以检查自定义的过滤器是否已经被 
添加到了文件类型下拉列表框里。  
Sub ListFilters2()   
      Dim fdfs As FileDialogFilters   
      Dim filt As FileDialogFilter   
      Dim c As Integer   
      Set fdfs = Application。FileDialog(msoFileDialogOpen)。Filters   
      Sheets(3)。Cells(1; 1)。Select   
      Selection。Formula = 〃List of Default Filters〃   
      With fdfs   

                                          185 

… 页面 202…

           c = unt   
           For Each filt In fdfs   
                 Selection。Offset(1; 0)。Formula = filt。Description & _   
                      〃: 〃 & filt。Extensions   
                 Selection。Offset(1; 0)。Select   
           Next   
           MsgBox c & 〃 filters were written to Sheet3。〃  
           。Add 〃Temporary Files〃; 〃*。tmp〃; 1   
           c = unt   
           MsgBox 〃There are now 〃 & c & 〃 filters。〃 & vbCrLf _   
                & 〃Check for yourself。〃   
           Application。FileDialog(msoFileDialogOpen)。Show   
      End With   
End Sub   
你可以使用FileDialogFilters集合的Clear方法清除所有预设的过滤器。修改一下上面的过程,在 
添加自定义的临时文件(*。tmp)过滤器之前,清除内置的过滤器。  
当你从文件打开对话框里选择一个文件时,该被选择的文件名称和路径就会被放置在 
FileDialogSelectedItems集合里。使用SelectedItems属性可以返回FileDialogSelectedItems集 
合。通过设定FileDialog对象的AllowMultiSelect属性为True,用户就可以同时按下Shift键或者 
Ctrl键和文件名称,选择一个或多个文件。  
接下来的过程示范了如何使用上面提及的属性,该过程打开一个新的工作簿并且插入一个列表框控 
件。允许用户选择一个以上的文件,然后被选择的文件将加入到该列表框控件里,并且加亮第一个 
文件名。  
Sub ListSelectedFiles()   
     Dim fd As FileDialog   
     Dim myFile As Variant   
     Dim lbox As Object   
      Set fd = Application。FileDialog(msoFileDialogOpen)   
     With fd   
           。AllowMultiSelect = True   
           If 。Show Then   
                Workbooks。Add   
                 Set lbox = Worksheets(1)。Shapes。 _  
                      AddFormControl(xlListBox; _  
                      Left:=20; Top:=60; Height:=40; Width:=300)   
                 lboxntrolFormat。MultiSelect = xlNone   
                For Each myFile In 。SelectedItems   
                      lboxntrolFormat。AddItem myFile   
                Next   
                Range(〃B4〃)。Formula = _   
                      〃You've selected the following 〃 & _   
                      lboxntrolFormat。ListCount & 〃 files:〃   
                 lboxntrolFormat。ListIndex = 1   
           End If   
      End With   
End Sub   

                                          186 

… 页面 203…

                                                                                         
图10…6 使用过程ListSelectedFiles(见上面)将用户选择的文件添加到工作表中列表框控件中去  
注意,Show方法不会将用户所选的文件打开,它仅仅显示文件打开对话框。当用户点击“打开”按 
钮时,文件名称通过SelectedItems属性从SelectedItems集合里获得。如果你希望用户点击“打开” 
按钮时立即执行文件的打开操作的话,你就应该使用FileDialog对象的Execute方法。下面的过程 
示范了如何立即打开用户选择的文件:  
Sub OpenRightAway()   
      Dim fd As FileDialog   
      Dim myFile As Variant   
      Set fd = Application。FileDialog(msoFileDialogOpen)   
     With fd   
           。AllowMultiSelect = True   
           If 。Show Then   
                 For Each myFile In 。SelectedItems   
                      。Execute   
                Next   
           End If   
      End With   
End Sub   

2。GetOpenFilename 和 GetSaveAsFilename 方法  

从多年以前开始,Excel就给程序员们提供了两种方便的VBA方法来显示文件另存为和文件打开对话 
框:GetOpenFilename和 GetSaveAsFilename。这些方法只有在Excel里可用,并且在Excel2002里 
面如果需要向后兼容的话仍然可用。  
GetOpenFilename方法显示“打开”对话框,在那里你可以选择要打开的文件名称,第二个方法 
 (GetSaveAsFilename)则显示另存为对话框。  
1。 在立即窗口输入下面的指令:  
Application。GetOpenFilename   
Application。GetSaveAsFilename   
Application。GetSaveAsFilename (〃Plan2。xls〃)   
GetOpenFilename方法从用户处获得文件名称,而不必实际打开某特定的文件。该方法有四个可选 
的参数,经常使用的是第一和第三个参数,显示入下表:  

                                          187 

… 页面 204…

  
GetOpenFilename参数    描述  
fileFilter             该参数决定了对话框的文件类型(译者:原文为Save as type,有误) 
                       下拉框了的内容。例如,要在文件类型下拉框里显示“Excel  
                       Files(*。xls)”的话,你就应该输入下列文本作为fileFilter: “Excel  
                       Files(*。xls); *。xls”(译者:“Excel Files; *。xls”也一样。)过 
                       滤器的前面部分(逗号前)决定文件类型下拉框要显示的文本,第二部 
                       分(逗号后)明确你要显示的那种类型的文件。确保你按照表格里的例 
                       子试验一下。  
title                  这是对话框的标题,如果忽略,对话框将显示标题为“打开”  
  
在立即窗口里输入下列语句(确保在一行输入),来看看这些参数是如何使用的:  
Application。GetOpenFilename(〃Excel Files(*。xls); *。xls〃);;〃Highlight the File〃   
GetOpenFilename方法返回所选的或者指定的文件名称,该名称之后可以在你的VBA过程里用来打开 
该文件,例如:  
yourFile = Application。GetOpenFilename   
?yourFile   
C:EXCELMark。xls   
Workbooks。Open Filename:=yourFile   
在上面的例子里,文件名称被赋予变量yourFile,接下来的两条输入为询问文件名称(?yourFile) 
和显示该名称(C:EXCELMark。xls)。第四条语句打开变量yourFile明确的文件。如果你通过点击 
Esc键或者对话框上的取消按钮来取消对话框的话,那么GetOpenFilename方法就会返回False。  
GetSaveAsFilename方法返回文件名和路径,然而,它不会自动地保存该特定的文件。输入下述指 
令提供文件名称:  
Application。GetSaveAsFilename (〃Plan2。xls〃)   
如果你忽略文件名称的话,Excel就会显示当前活动文件的名称。当你使用GetSaveAsFilename方法 
时,你可以明确文件过滤器和对话框自定义标题:  
yourFile    =   Applica
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架