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

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

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



   Next  
   With ActiveSheet  
        。Range(〃A2〃)pyFromRecordset rst  
        。Range(Cells(1; 1); _  
          Cells(1; rst。Fieldsunt))。Font。Bold = True  
        。Range(〃A1〃)。Select  
   End With  
   Selection。CurrentRegionlumns。AutoFit  
   rst。Close  
   Set cmd = Nothing  
   Set cat = Nothing  
 End Sub  
 想要运行上述过程的话,可以在立即窗口里面输入下述语句并回车:  
   RunAccessQuery(〃Current Product List〃)  
     
   
   
   
   

                                        302 

… 页面 319…

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
                                                       
   
 图15…11 从Excel VBA过程运行Access查询的结果被放在了一个工作表里了  
  (译者,从立即窗口运行可能遇到编译错误,如果这样的话,可以从一个子程序里调用该过程。)  

13。运行参数查询  

 你可以运行Access参数查询并将其结果放置于Excel 电子表格里面。例如,过程  
 RunAccessParamQuery通过Access数据库的参 数查询运行Employee Sales by Country,并且 
 取得7/1/96和7/30/96区间内的记录。Employee Sales by Country查询要求两个参 数:开始 
 和结束时间。      
 应该使用mand对象的Paramenters集合定义这些参数:  
 cmd。Parameters(〃'Beginning Date'〃) = StartDate  
 cmd。Parameters(〃'Ending Date'〃) = EndDate  
 设置参数后,该查询就可以使用下述语句执行了:  
 Set rst = cmd。Execute 该查询返回的记录会被赋予对象变量Recordset并使用 
 CopyFromRecordset方法复制到工作表(参见本章后面更多相关使用信 息)。  
 Sub RunAccessParamQuery()  
      ' prior to running this procedure you must set up  
      ' references to the required object libraries  
      Dim cat As ADOX。Catalog  
      Dim cmd As ADODBmand  
      Dim rst As ADODB。Recordset  
      Dim i As Integer  
      Dim dbPath As String  
      Dim StartDate As String  
      Dim EndDate As String  
      dbPath = 〃C:Program FilesMicrosoft Office” _  
        & 〃OfficeSamplesNorthwind。mdb〃  
      StartDate = 〃7/1/96〃  
      EndDate = 〃7/31/96〃  
      Set cat = New ADOX。Catalog  
      cat。ActiveConnection = 〃Provider=Microsoft。Jet。OLEDB。4。0;〃 & _  
        〃Data Source=〃 & dbPath  
      Set cmd = cat。Procedures(〃Employee Sales by Country〃)mand  
      cmd。Parameters(〃'Beginning Date'〃) = StartDate  
      cmd。Parameters(〃'Ending Date'〃) = EndDate  
      Set rst = cmd。Execute  
      Sheets(1)。Select  
            
      For i = 0 To rst。Fieldsunt … 1  
        Cells(1; i + 1)。Value = rst。Fields(i)。Name  
      Next  
        
      With ActiveSheet  
        。Range(〃A2〃)pyFromRecordset rst  

                                          303 

… 页面 320…

        。Range(Cells(1; 1); Cells(1; rst。Fieldsunt))。Font。 _  
        Bold = True  
        。Range(〃A1〃)。Select  
      End With  
      Selection。CurrentRegionlumns。AutoFit  
      rst。Close  
      Set cmd = Nothing  
      Set cat = Nothing  
 End Sub  
  (译者:本人运行上述过程不成功,将Parameters参数改为cmd。Parameters(0) = StartDate, 
 cmd。Parameters(1) = EndDate才 运行成功。另外过程给定的日期范围查询结果为空,可以更 
 改查询日期范围。译者使用示例文件Nwind。mdb。自此以下,因删除 非法软件,译者使用Excel  
 2003英文版,Access 2002英文版)  

14。调用 Access 函数   

你可以通过自动控制从Excel里直接运行Access内置函数。下面的过程调用EuroConvert函数将 
1000西班牙比赛塔转变为欧元。 EuroConvery函数使用欧盟确定的固定汇率。    
         Sub RunAccessFunction()  
           Dim objAccess As Object  
           On Error Resume Next  
            Set objAccess = GetObject(; 〃Access。Application〃)  
            'if no instance of Access is open; create a new one  
            If objAccess Is Nothing Then  
                Set objAccess = CreateObject(〃Access。Application〃)  
           End If  
           MsgBox 〃You will get 〃 & _  
              objAccess。EuroConvert(1000; 〃ESP〃; 〃EUR〃) & _  
              〃 euro dollars。 〃  
          Set objAccess = Nothing  
           End Sub  

15。获取 Access 数据到 Excel 工作表  

 有很多种方法获取外部数据到Excel。本节给你示范下述不同的技巧将Access数据导入Excel工 
 作表:  
 *   使用GetRows方法  
 *   使用CopyFromRecordset方法  
 *   使用TransferSpreadsheet方法  
 *   使用OpenDatabase方法  
 *   创建一个文本文件  
 *   创建一个查询表  

16。使用 GetRows 方法获取数据   

你可以使用GetRows方法,将Access数据放置于Excel工作表。该方法返回一个二维的数组,第一个 
下标是一个代表字段的数字, 而第二个下标则是代表记录的数字。记录和字段从0开始。 你通 
过在VBA过程里使用DAO返回数据到Excel工作表。下述示例过程示范了如何运行Northwind数据 
库里的Invoices查询,并记 录返回到Excel工作表。为了确保该过程工作正确,你必须首先建 
立对Microsoft Access 3。6 Object Library的引用。参考本章前 面的创建对对象库的引用。  
 打开Access数据库后,GetData_withDAO2过程示范使用下述语句运行Invoices查询:      
 Set qdf = db。QueryDefs(〃Invoices〃)  
 Microsoft Access 3。6 对象库里的QueryDefs对象代表一选择或者行动查询。选择查询从一 
 个或者多个表或者查询里返回数据, 然而,行动查询允许你修改数据(使用行动查询你可 
 以添加,修改或者删除记录)执行查询后,过程将查询返回的记录通过OpenRecordset方法 
 放置到对象变量Recordset上,如下所示:  
 Set rst = qdf。OpenRecordset 接下来,通过RecordCount方法获取记录数目并且放置于变 
 量countR上。注意,为了获得正确的记录数目,记录指针必须通过 使用MoveLast方法移动 
 到Recordset里的最后一条记录。  
 rst。MoveLast  
 countR = rst。RecordCount 接着,过程提示用户输入要返回到工作表的记录数目。你可以点击 
 输入对话框上的取消按钮就此取消,或者输入记录数目获取数 据。如果你输入的数字大于该 

                                          304 

… 页面 321…

 记录数目,过程将获取全部记录。在获取记录之前,你必须使用方法MoveFirst将记录指针移 
 动到 第一条记录。如果你忘了做这个,那么记录指针会停留在最后一条记录上,并且将只能 
 获取一条记录。然后,该过程继续执行, 激活Get Records工作表和清除当前范围内容。首先, 
 通过使用Recordset对象的GetRows方法,记录将返回到一个二维数组的 Variant类型变量。接 
 着,过程在数组的两维中循环将记录放置到工作表中,从单元格A2开始。这一切完成后,另一 
 个循环将在 工作表第一行里放置字段名称,并且将每列设置为自动适应列宽,以正确现实数 
 据。  
 Sub GetData_withDAO2()  
      Dim db As DAO。Database  
      Dim qdf As DAO。QueryDef  
      Dim rst As DAO。Recordset  
      Dim recArray As Variant  
      Dim i As Integer  
      Dim j As Integer  
      Dim strPath As String  
      Dim a As Variant  
      Dim countR As Long  
      Dim strShtName As String  
      strPath = 〃C:Program FilesMicrosoft Office” _  
        & 〃OfficeSamplesnorthwind。mdb〃  
      strShtName = 〃Returned records〃  
      Set db = OpenDatabase(strPath)  
      Set qdf = db。QueryDefs(〃Invoices〃)  
      Set rst = qdf。OpenRecordset  
      rst。MoveLast  
      countR = rst。RecordCount  
      a = InputBox(〃This recordset contains 〃 & _  
        countR & 〃 records。〃 & vbCrLf _  
        & 〃Enter number of records to return: 〃; _  
        〃Get Number of Records〃)  
      If a = 〃〃 Or a = 0 Then Exit Sub  
      If a 》 countR Then  
        a = countR  
        MsgBox 〃The number you entered is too large。〃 & vbCrLf _  
            & 〃All records will be returned。〃  
      End If  
      Workbooks。Add  
      ActiveWorkbook。Worksheets(1)。Name = strSh
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!