友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第110章

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



      End If  
      Workbooks。Add  
      ActiveWorkbook。Worksheets(1)。Name = strShtName  
      rst。MoveFirst  
      With Worksheets(strShtName)。Range(〃A1〃)  
        。CurrentRegion。Clear  
        recArray = rst。GetRows(a)  
        For i = 0 To UBound(recArray; 2)  
          For j = 0 To UBound(recArray; 1)  
               。Offset(i + 1; j) = recArray(j; i)  
          Next j  
        Next i  
        For j = 0 To rst。Fieldsunt … 1  
          。Offset(0; j) = rst。Fields(j)。Name  
          。Offset(0; j)。EntireColumn。AutoFit  
        Next j  
      End With  
      db。Close  
 End Sub  

17。使用 CopyFromRecordset 方法获取数据  

  想要将整个Recordset导入工作表的话,你可以使用Range对象的CopyFromRecordset方法。 
 该方法可以使用三个参数:Data, MaxRows和MaxColumns。只有第一个参数Data是必须的。 
 该参数可以是Recordset对象。可选参数MaxRows和MaxColumns 允许你明确应该返回的记录数 
 目(MaxRows)和字段数目(MaxColumns)。如果你忽略MaxRows参数,那么所有返回的记录 将 
 会复制到工作表;如果你忽略MaxColumns参数,那么所有的字段将会被获取。下面示范的过 
 程GetProducts使用ADO对象建  

                                         305 

… 页面 322…

 立对Northwind数据库的链接。为了让该过程工作正常,你必须先建立对Microsoft ActiveX  
 Data Objects 2。6 Library的引用(参 见本章前面有关创建对对象库引用的指导)。  
 Sub GetProducts()  
      Dim conn As New ADODBnnection  
      Dim rst As ADODB。Recordset  
      Dim strPath As String  
      strPath = 〃C:Program FilesMicrosoft Office” _  
        & 〃OfficeSamplesNorthwind。mdb〃  
      conn。Open 〃Provider=Microsoft。Jet。OLEDB。4。0;〃 _  
        & 〃Data Source=〃 & strPath & 〃;〃  
      conn。CursorLocation = adUseClient  
      ' Create a Recordset from all the records  
      ' in the Products table  
      Set rst = conn。Execute(mandText:=〃Products〃; _  
        Options:=adCmdTable)  
      ' begin with the first record rst。MoveFirst  
      ' transfer the data to Excel  
      ' get the names of fields first  
      With Worksheets(〃Sheet3〃)。Range(〃A1〃)  
        。CurrentRegion。Clear  
        For j = 0 To rst。Fieldsunt … 1  
            。Offset(0; j) = rst。Fields(j)。Name  
        Next j  
        。Offset(1; 0)pyFromRecordset rst  
        。CurrentRegionlumns。AutoFit  
      End With  
      rst。Close  
      conn。Close  
 End Sub   
 上述过程从Northwind数据库的Products表中复制所有的记录到Excel工作表。如果你想要复 
 制某一些记录的话,那么你可以使用 MaxRows参数,如下所示:  
 。Offset(1; 0)pyFromRecordset rst; 5 该语句告诉VB仅复制5条记录。 
 该Offset方法导致输入到电子表格里的记录从电子表格当前行的第二行开 
 始。 想要仅将两个表字段的所有记录发送到工作表的话,可以使用下述语 
 句:  
 。Offset(1; 0)pyFromRecordset rst; ; 2  
 该语句告诉VB从开始两列复制所有数据。在rst和数字2之间的逗号是个占位符,给被忽略的 
 MaxRows参数。   

18。使用 TransferSpreadsheet方法获取数据  

  可能使用TransferSpreadsheet方法在当前Access数据库(。mdb)或者Access项目(。adp)和 
 电子表格之间导入或者导出数据。 你也可以将Excel电子表格里的数据链接到当前Access数据 
 库。对于链接的电子表格,当Access仍然允许从Excel程序里完全访 问时,你可以使用Access 
 来查看和编辑电子表格数据。在VB里执行TransferSpreadsheet操作的TransferSpreadsheet 
 方法语法 如下:  
 DoCmd。TransferSpreadsheet 'transfertype''; spreadsheettype'; _  
       tablename; filename '; hasfieldnames''; range' 参数transfertype可以是以下常 
 数之一:acImport(缺省设置),acExport或者acLink。这些常数定义数据是否是导入,导出 
 或者 链接到数据库。  
 参数spreadsheettype可能是下述常数之一:  
 0      acSpreadsheetTypeExcel3 (default setting)  
 6           acSpreadsheetTypeExcel4  
 5           acSpreadsheetTypeExcel5  
 5           acSpreadsheetTypeExcel7  
 8           acSpreadsheetTypeExcel8  
 8           acSpreadsheetTypeExcel9  
 2           acSpreadsheetTypeLotusWK1  
 3           acSpreadsheetTypeLotusWK3  
 7           acSpreadsheetTypeLotusWK4  
 不难猜到,spreadsheettype参数明确电子表格名称和版本号。 tablename参数是个字符串表 

                                         306 

… 页面 323…

 达式,明确你想要往里面导入电子表格数据,或者从里面导出电子表格数据,或者将电子表格 
 数据 链接到的Access表的名称。除了表名称之外,你也需要明确你想要导出数据到电子表格 
 的选择查询名称。 hasfieldnames参数是个逻辑值True(…1)或者False(0)。True表明工作表第 
 一行包含字段名称;False则表示第一行包含普通数据。 缺省设置为False(第一行里没有字 
 段名称)。 参数range是个字符串表达式,明确工作表中的单元格区域或者区域名称。该参数 
 仅用于导入。如果你忽略range参数的话,那 么整个电子表格将会被导入。如果你想要导出的 
 话,就将该参数空在那里,除非你需要明确该工作表名称。 下面示范的ExportData示例程序 
 使用TransferSpreadsheet方法从Northwind数据库里的Shippers表中导出数据到 
 Shippers。xls电 子表格中。注意,该过程使用了自动控制来建立对Access的链接。建立链接后, 
 使用OpenCurrentDatabase方法打开Northwind 数据库。运行完ExportData过程后,请打开 
 C:Shippers。xls文件查看获取的数据。  
  ‘ declare at the top of the module  
 Dim objAccess As Access。Application  
 Sub ExportData()  
   Set objAccess = CreateObject(〃Access。Application〃)  
   objAccess。OpenCurrentDatabase filepath:= _  
        〃C:Program FilesMicrosoft OfficeOffice” _  
   & 〃SamplesNorthwind。mdb〃  
   objAccess。DoCmd。TransferSpreadsheet _  
   TransferType:=acExport; _  
      SpreadsheetType:=acSpreadsheetTypeExcel9; _  
      TableName:=〃Shippers〃; _  
      Filename:=〃C:Shippers。xls〃; _  
      HasFieldNames:=True; _  
      Range:=〃Sheet1〃  
   objAccess。Quit  
   Set objAccess = Nothing  
 End Sub  
  (译者:原文为acSpreadsheetTypeExcel10运行失败)  
   
   
   
   
   
   
   
   
   
   
                                                               
   
 图15…12 使用TransferSpreadsheet方法可以将Access表里的数据导出到Excel电子表格里  

19。使用 OpenDatabase 方法  

 Excel 2002提供了一个操纵数据库的新方法,OpenDatabase方法,应用于Workbooks集合,是将 
 数据库数据导入Excel电子表  
 格最容易的方法。该方法要求你明确你想要打开的数据库文件名称。下面的示例过程打开位于 
 C:Program FilesMicrosoft  
 OfficeOffice10Samples文件夹里的Northwind数据库。当你运行该过程,Excel显示一个对 
 话框,列出了该数据库里的所有表和 查询(参见图15…13)。从列表里选择后,就会打开一 
 个全新的工作簿,显示被选上的表或者查询里的数据。  
 Sub OpenAccessDatabase()  
   Workbooks。OpenDatabase _  
      Filename:=〃C:Program FilesMicrosoft Office” _  
      & 〃Office10SamplesNorthwind。mdb〃  
 End Sub  
  
   
   
   

                                         307 

… 页面 324…

  
  
  
图15…13 使用带一个参数(数据库文件名称)的OpenDatabase方法允许从一个列表框里选择一 
个表或者查询  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
                                                                        
  
图15…14 使用Excel 2002里新增的OpenDatabase方法可以轻易地将储存在表或者查询里的数据 
库数据导入Excel工作簿  
OpenDatabase方法有四个可选参数,可供你进一步限定你要获取的数据:  
OpenDatabase方法的可选参数    数据类型   描述  
mandText                                Variant SQL查询字符串。参见使用该参数的 
示例  
mandType         
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!