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

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
      Dim objAccess As Object  
      Set objAccess = GetObject(; “Access。Application。10”)  
      或者  
      Set objAccess = GetObject(“C:Program Files _  
      & “Microsoft OfficeOfficeSamplesNorthwind。mdb”) 使用GenObject函数返回引 
 用到应用软件对象,以使用Access的当前实例,或者开启Access并打开一个文件(更多信息 
 参见技 巧15…2)  
 Dim objAccess As New Access。Application 上面的语句使用关键字New,声明了一个 
 对象变量,返回引用到应用软件对象,并且将该引用赋予对象变量,一步完成。 你也可 
 以使用两步法来声明一个对象变量,这样,对该对象的控制会更多些:  
 Dim objAccess As Access。Application  
 Set objAccess = New Access。Application  
 □ 当使用关键字New声明对象变量时,Access应用软件并不会打开,直到你开始在VBA代码里 
 真正使用该对象变量。  
 □ 当使用关键字New声明应用软件对象变量时,Access的一个新实例就会自动创建,你不需要 
 使用CreateObject函数  
 □ 使用关键字New创建应用软件对象的新实例比使用CreateObject函数要快 因为电脑上 
 可能安装了多个版本的Access,所以需要在函数GetObject或者CreateObject里包括该版本 
 号。下面列出最后四个 Access版本:  
 Microsoft Access 2003 Access。Application。11 (译者加)  
 Microsoft Access 2002 Access。Application。10  
 Microsoft Access 2000 Access。Application。9  
 Microsoft Access 97 Access。Application。8  

                                         293 

… 页面 310…

Microsoft Access 95 Access。Application。7 一旦使用第三步列出的方法之一创建了应用软 
件类的新实例,你就可以通过OpenCurrentDatabase或者NewCurrentDatabase方 法的帮助来打 
开一个数据库或者创建一个新数据库。你可以使用CloseCurrentDatabase方法关闭你在程序里 
打开的Access数据 库。  
技巧15…2 GetObject函数的参数  
GetObject函数的第一个参数 – Pathname – 是可选的。 当你想要使用某个特定文件里的对象 
是要用到它。第二个参数 – Class –  
是必需的,它明确哪个应用软件创建该对象,以及该对象的类型。当第一个参数为可选的而第二 
个为必需的时,你就必须在第一  
个参数位置放置一个逗号,如下所示:  
  
  
  
Dim objAccess As Object  
Set objAccess = GetObject(; Access。Application。10”)  
因为GetObject函数的第一个参数(Pathname)被忽略了,所以,就返回对Access应用软件类的 
现存的实例的引用。  
Dim objAccess As Object  
Set objAccess = GetObject(“C:Program Files & “Microsoft  
OfficeOfficeSamplesNorthwind。mdb”)  
如果GetObject函数的第一个参数是个数据库文件的名称,那么就会使用该具体数据库,激活或 
者创建Access应用软件类的新实例。  
  
既然你知道了如何创建代表应用软件的对象变量,那么我们就来看看一个从Excel VBA过程里直 
接打开Access数据库的程序示例 吧。下页显示的过程AccessViaAutomation将打开一个Access 
文件Northwind数据库。该过程将使用Access自动控制服务器的当 前实例,如果它可用的话。 
如果Access没有运行,运行时间错误将发生,并且该对象变量将被设置为Nothing。你可以通 
过在程 序里放置On Error Resume Next 语句捕捉该错误。因此,如果Access没有运行,新的 
Access实例就会被打开。本例子使用关键 字New来启动Access的新实例。正如前面所述,除了 
使用关键字创建新对象实例之外,你也可以使用CreateObject()函数来启动  
  
自动控制服务器的新实例,如下所示:  
Set objAccess = GetObject(; “Access。Application。10”)  
If objAccess Is Nothing Then  
      Set objAccess = CreateObject(“Access。Application。10”)  
End If 当你使用自动控制启动Access时,你将在任务栏上看到Access图标。Access应用软件 
对象的Visible属性被设置为False。想要 恢复该应用软件窗口的话,就得将其Visible属性 
设置为Trie。 在使用时,对象要消耗内存和系统资源。要释放这些资源的话,那么你每次使 
用完它的时候总应该关闭该对象。 下面示范的程序例子首先使用CloseCurrentDatabase方法 
关闭Northwind数据库。接着,使用Quit方法关闭Access应用程序对象。 在关闭对象后,你也应 
该将对象变量设置为关键字Nothing以释放该变量使用的内存资源。 你可以将对象变量声明为 
模块级,而不是过程级变量,以避免Access实例被关闭。 在这样的环境下,对数据库的链接 
就会保持,直到你关闭该自动控制的控制源(Excel)或者在VBA代码里使用Quit方法关闭它。  
Sub AccessViaAutomation()  
  Dim objAccess As Access。Application  
  Dim strPath As String  
  On Error Resume Next  
  Set objAccess = GetObject(; 〃Access。Application。9〃)  
   If objAccess Is Nothing Then  
     ' Get a reference to the Access Application object  
     Set objAccess = New Access。Application  
  End If  
   strPath = 〃C:Program FilesMicrosoft Office” _  
       & 〃OfficeSamplesnorthwind。mdb〃  
  ' Open the Northwind database  
  With objAccess  
     。OpenCurrentDatabase strPath  
     If MsgBox(〃Do you want to make the Access 〃 & vbCrLf _  
       & 〃Application visible?〃; vbYesNo; _  
       〃Display Access〃) = vbYes Then  

                                        294 

… 页面 311…

           。Visible = True  
           MsgBox 〃Notice the Access Application icon 〃 _  
               & 〃now appears on the Windows taskbar。〃  
      End If  
      ' Close the database and quit Access  
      。CloseCurrentDatabase  
      。Quit  
   End With  
   Set objAccess = Nothing  
 End Sub  
 使用F8键逐语句运行上面的过程。  
 技巧15…3 打开被保护了的Access数据库  
 如果该Access数据库用密码保护了,那么会提示用户输入正确的密码。你必须使用Data Access  
 Objects (DAO)或者ActiveX Data  
 Access (ADO)来编程打开密码保护的Access数据库。下面的例子使用了Access对象的DBEngine 
 属性来确定该数据库的密码。  
 要让该过程工作的话,你就必须创建对Microsoft DAO 3。6对象库的引用,如本章开头所述。  
 Sub OpenSecuredDB()  
       Static objAccess As Access。Application  
       Dim db As DAO。Database  
       Dim strDb As String  
       strDb = 〃C:Program FilesMicrosoft Office” & 〃OfficeSamples _  
       Northwind。mdb〃  
       Set objAccess = New Access。Application  
       Set db = objAccess。DBEngine。OpenDatabase(Name:=strDb; Options: False; _  
        ReadOnly:=False; Connect:=〃;PWD=test〃)  
         
       With objAccess  
           。Visible = True  
           。OpenCurrentDatabase strDb  
       End With  
       db。Close  
       Set db = Nothing  
 End Sub  

5。使用 DAO 链接到 Access 数据库  

 要使用数据访问对象(DAO)连接到Access数据库的话,你就必须首先在引用对话框里创建对 
 Microsoft Data Access Objects 3。6  
 Library的引用。下面示范的程序例子DAOOpenJetDatabase,使用DBEngine对象的OpenDatabase 
 方法来打开Northwind数据库, 并且通知用户该数据库已被打开。DBEngine对象让你初始化称 
 为Microsoft Jet Engine的标准数据库引擎并打开一个数据库文件  
  (。mdb)。过程使用Close方法关闭数据库文件。  
 Sub DAOOpenJetDatabase()  
   Dim db As DAO。Database  
   Set db = DBEngine。OpenDatabase _  
    (〃C:Program FilesMicrosoft OfficeOfficeSamplesNorthwind。mdb〃)  
   MsgBox 〃Northwind database has been opened。〃  
    db。Close  
   MsgBox 〃Northwind database has been closed。〃  
 End Sub  

6。使用 ADO 链接到 Access 数据库  

 最新的,最建议的建立对Access数据库链接的方法是使用ActiveX 数据对象(ADO)。你必须先 
 设置对微软ActiveX数据对象2。5库 或者更高版本的引用。示例程序ADOOpenJetDatabase使用 
 Connection对象链接到Northwind数据库。该对象通过Open方法打 开。注意,Open方法需要 
 一个包含数据提供者名称(本例中为Microsoft。Jet。OLEDB。4。0)和数据源名称(本例中为要 
 打开的数 据库文件完整名称)的链接字符串参数:  
 con。Open _  
    〃Provider=Microsoft。Jet。OLEDB。4。0;〃 _  
   & 〃Data Source=C:Program FilesMicrosoft Office” _  
   & 〃OfficeSamplesNorthWind。mdb;〃 在建立对Northwind数据库的链接之后,你可以使用 
 Recordset对象来访问其数据。Recordset对象用来在记录级操作数据。 Recordset对象由记 

                                         295 

… 页面 312…

 录(行)和字段(列)组成。要获得一套记录,你就得使用Open方法打开Recordset。该方法 
 需要明确的信 息,例如Recordset记录源:  
 rst。Open 〃SELECT * FROM Customers 〃 & _  
    〃WHERE City = 'London'〃; con; _  
    adOpenForwardOnly; adLockReadOnly 记录源可以是返回记录的数据库表,或查询或SQL语 
 句。在明确记录源后,你还需要表明对数据库(con)和两个常数,一个定 义指针类型 
  (adOpenForwardOnly),另一个为锁定类型(adLockReadOnly)。常数adOpenForwardOnly 
 告诉VBA创建只能 向前翻的Recordset。第二个常数adLockReadOnly明确在编辑时记录上的锁 
 定类型。该记录为只读,意味着你不能改变该数据。 过程的下一部分使用For…Each…Next循 
 环遍历Recordset并将第一条记录的内容打印到立即窗口:  
 For Each fld In rst。Fields  
       Debug。Print fld。Name & 〃=〃 & fld。Value & vbCr  
  Next  
 在获取第一条记录的数据后,过程使用了Close方法关闭Recordse
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架