按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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