Detectar si está instalado Microsoft Access

Puede ser útil para probar la existencia de acces antes de ejecutar su código.

 El código siguiente determina si Acces está en el equipo:

  

Sub existenceCheck()

   Dim objApp As Object

   Dim strNotFound As String    

   Const ERR_APP_NOTFOUND As Long = 429

   strNotFound = "Access is not installed on this machine. " _

      & vbCrLf & "Unable to automate Access."

   On Error Resume Next     

   ' Attempt to create late-bound instance of Access application.

   Set objApp = CreateObject("Access.Application")

   

   If Err = ERR_APP_NOTFOUND Then

      MsgBox strNotFound

      Exit Sub

   End If

   With objApp

      ' Code to automate Access here.

      .Quit

   End With

   Set objApp = Nothing

End Sub

 Creación de una instancia de Microsoft Access

Con el fin de manipular objetos de Microsoft Access a través de automatización, es necesario crear una instancia del objeto de la aplicación Microsoft Access.

 

Dim accessApp As Object

Set accessApp = CreateObject("Access.Application")

Dim accessApp As Access.Application

Set accessApp = CreateObject("Access.Application")

  

Principios de unión con la palabra clave "New" 

También puede utilizar la palabra New anticipado para crear una instancia de Microsoft Access. La palabra clave New le permite a la dimensión de la variable como una nueva instancia de Microsoft Access sin tener que utilizar la función CreateObject o la función GetObject. Tan pronto como cualquier método o propiedad de la variable de objeto se refiere, se crea la instancia. Por ejemplo:

 

Dim accessApp As New Access.Application
accessApp.Visible = True

 

Referencia a una nueva instancia de Microsoft Access

Al usar la automatización para crear una nueva instancia de Microsoft Access, hacer referencia al objeto de la aplicación.

 Para obtener más información acerca de hacer referencia a una instancia existente de Microsoft Access,

 vea Hacer referencia a una instancia existente de Microsoft Access.

 

Para abrir una base de datos en la nueva instancia, utilice el método OpenCurrentDatabase. 

Para crear una nueva base de datos, utilice el método NewCurrentDatabase.

 

 

Dim accessApp As Access.Application

Sub OpenNorthwind()

   Set accessApp = CreateObject("Access.Application")    

   With accessApp

      .OpenCurrentDatabase("C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb")

   End With

 End Sub

 

Referencia a una instancia existente de Microsoft Access

A veces es útil para su código para referirse a una instancia existente de Microsoft Access en lugar de crear uno nuevo. Para obtener más información acerca de hacer referencia a una nueva instancia de Microsoft Access, vea Hacer referencia a una nueva instancia de Microsoft Access. La mejor manera de determinar si una instancia de Microsoft Access se está ejecutando es utilizar la función GetObject sin necesidad de utilizar el argumento de ruta y el uso de "Access.Application" como argumento de la Clase.

 

Si una instancia de Access existe, la variable de objeto hace referencia al objeto Application de esa instancia. Si más de una instancia de Access existe, se elegirá uno al azar.

 

Si no hay ninguna instancia de Access, interceptable en tiempo de ejecución error. El manejo de errores se debe utilizar en su código, en caso de que una instancia de Access no existe. Después de la referencia se crea, se puede determinar qué base de datos está abierta, en su caso, y el uso de la CloseCurrentDatabase, OpenCurrentDatabase, o el método NewCurrentDatabase, según sea necesario.

 

 

Sub StartAccess()

    On Error Resume Next

    Set objAccess = GetObject(, "Access.Application")

    

    If Err.Number <> 0 Then

        MsgBox "No instance of Access available.  Starting" _

            & vbCrLf & "a new instance..."

        Err.Clear

        Set objAccess = CreateObject("Access.Application")

    Else

        MsgBox "There is an instance of Access available."

    End If

    

End Sub

La terminación de la instancia de Microsoft Access

Normalmente, la instancia de Access se termina cuando la variable de objeto que hace referencia a la instancia se establece en Nothing o pierde su ámbito. Sin embargo, si una tabla, consulta, formulario o informe está abierto en la vista normal, o una tabla está abierta en la vista Diseño, la instancia no se termina cuando la variable de objeto se establece en Nothing o pierde su ámbito. En este caso, la instancia termina sólo cuando el usuario cierra los objetos abiertos y la propiedad de la instancia UserControl es falso. En cualquier caso, si la propiedad UserControl de la instancia es cierto que la instancia no se termina cuando la variable de objeto se establece en Nothing o pierde su ámbito. Debe utilizar el método Quit, si se dan estas condiciones y desea finalizar la instancia. Por ejemplo:

 

     accessApp.Quit

     Set = Nothing accessApp

 

Sin embargo, el método Quit no se debe utilizar si la instancia es un "especial" de ejemplo, como se describe en un llamamiento en Microsoft Access las funciones incorporadas, y su aplicación puede seguir haciendo llamadas directas al acceso a las funciones. Por ejemplo, si GetObject recupera una instancia existente de Access que se ha creado automáticamente por el cliente, ya que la aplicación cliente realiza una llamada directa a una función de Access, que "especial" instancia de acceso no debe ser terminado mediante el uso de dejar de fumar.

 

Si la instancia se termina con dejar de fumar, y la aplicación cliente realiza otra llamada directa a una función de Access, el cliente genera un "error de automatización OLE" cuando no puede encontrar la instancia especial. Utilice el método Quit sólo si está seguro de que la instancia no es un caso especial o si la aplicación no se siguen haciendo llamadas directas al acceso a las funciones.

 

NOTA: Cuando la variable de objeto que apunta a un caso especial se establece en Nothing o pierde su ámbito, que no pongan fin a la instancia especial, independientemente de su configuración de control de usuario. A "especial" instancia se termina automáticamente por el cliente cuando la aplicación cliente se cierra o se restablece.

 

Consejo: Para evitar que una instancia de acceso de terminación cuando su variable de objeto pierde su ámbito, utilizar una variable de nivel de módulo o pública de nivel para hacer referencia a esa instancia de Access, en lugar de una variable de nivel de procedimiento. 

NewCurrentDatabase Ejemplo del método

 

El siguiente ejemplo crea una nueva base de datos de Microsoft Access desde otra aplicación a través de automatización, y luego crea una nueva tabla en la base de datos.

 

Puede introducir este código en un módulo de Visual Basic en cualquier aplicación que puede actuar como un componente COM. Por ejemplo, puede ejecutar el siguiente código de Microsoft Excel, Microsoft Visual Basic o Microsoft Access.

 

Cuando la variable que apunta al objeto de aplicación queda fuera del ámbito, la instancia de Microsoft Access que representa se cierra también. Por lo tanto, debe declarar esta variable en el nivel de módulo.

 

"En este ejemplo se requiere la adición de una referencia de proyecto a la

"Microsoft Access 10.0 Object Library.

 

"Incluir la siguiente en la sección Declaraciones de un módulo.

 

Dim appAccess As Access.Application

 

Sub NewAccessDatabase()

Dim dbs As Object, tdf As Object, fld As Variant

Dim strDB As String

Const DB_Text As Long = 10

Const FldLen As Integer = 40

 

' Initialize string to database path.

strDB = "C:\My Documents\Newdb.mdb"

 

' Create new instance of Microsoft Access.

Set appAccess = CreateObject("Access.Application")

 

' Open database in Microsoft Access window.

appAccess.NewCurrentDatabase strDB

' Get Database object variable.

Set dbs = appAccess.CurrentDb

' Create new table.

Set tdf = dbs.CreateTableDef("Contacts")

 

' Create field in new table.

Set fld = tdf. CreateField("CompanyName", DB_Text, FldLen)

' Append Field and TableDef objects.

tdf.Fields.Append fld

dbs.TableDefs.Append tdf

Set appAccess = Nothing

End Sub

La salida de un informe de Microsoft Access

 

Esta función genera un informe en el formato especificado por el argumento lngRptType opcional. 

Si lngRptType se especifica, el informe se abre automáticamente en la aplicación correspondiente. 

lngRptType puede ser cualquiera de las siguientes constantes definidas por la enumeración

 opgRptType en la sección Declaraciones del módulo

 

Enum opgRptType

   XLS = 1

   RTF = 2

   SNAPSHOT = 3

   HTML = 4

End Enum

 

 

donde

 

XLS = salida a Excel

RTF = salida a formato de texto enriquecido

Descripción = salida para acceder a formato de instantánea de informe

HTML = salida a HTML

Si lngRptType no se especifica, el informe se abre en el acceso y se muestra en la vista preliminar.

--

Function GetReport(Optional lngRptType As opgRptType) As Boolean

    

    Dim acApp As Access.Application

    Dim strReportName As String

    Dim strReportPath As String

        

   Const SAMPLE_DB_PATH As String = "c:\program files\" _

      & "microsoft office\office\samples\northwind.mdb"

    

   strReportName = "Alphabetical List of Products"

   strReportPath = App.Path & "\"

 

   ' Start Access and open Northwind Traders database.

   Set acApp = GetObject(SAMPLE_DB_PATH, "Access.Application")

   With acApp

      ' Output or display in specified format.

      With .DoCmd

         Select Case lngRptType

            Case XLS

               .OutputTo acOutputReport, strReportName, _

                  acFormatXLS, strReportPath & "autoxls.xls", True

            Case RTF

               .OutputTo acOutputReport, strReportName, _

                  acFormatRTF, strReportPath & "autortf.rtf", True

               ' Snapshot Viewer must be installed to view snapshot

               ' output.

            Case SNAPSHOT

               .OutputTo acOutputReport, strReportName, _

                  acFormatSNP, strReportPath & "autosnap.snp", True

            Case HTML

               .OutputTo acOutputReport, strReportName, _

                  acFormatHTML, strReportPath & "autohtml.htm", _

                  True, "NWINDTEM.HTM"

            Case Else

               acApp.Visible = True

               .OpenReport strReportName, acViewPreview

         End Select

      End With

      ' Close Access if this code created current instance.

      If Not .UserControl Then

         acApp.Quit

         Set acApp = Nothing

      End If

   End With

   GetReport = True

End Function

 

 

La apertura de una base de datos segura a través de automatización

 

Esta función abre una base de datos de Access segura de la automatización. Toma los siguientes argumentos:

 

strDbPath = ruta completa de la base de datos segura

strUser = nombre de la cuenta de usuario para abrir la base de datos

strPassword = contraseña de strUser

strWkgrpPath = ruta completa al archivo de información de grupo de trabajo que contiene la cuenta strUser

 

Function GetSecureDb(strDbPath As String, _

                     strUser As String, _

                     strPassword As String, _

                     strWrkgrpPath As String) As Boolean    

        

   Dim acApp As Access.Application

   Dim strCommand As String

    

   Const APP_PATH As String = "d:\program files\microsoft office\office10\msaccess.exe"

   

   ' Build Access command line to pass to Shell function.

   strCommand = """" & APP_PATH &  """" & " " & """" & strDbPath & """" _

                & " /User" & strUser & " /Pwd" & strPassword _

                & "/NoStartup" & " /Wrkgrp " & """" & strWrkgrpPath & """"

    

   ' Pass command line to Shell function. If this succeeds, pass

   ' the database path to the GetObject function and loop until

   ' the acApp object variable is initialized.

   If Shell(strCommand) Then

      Do

         On Error Resume Next

         Set acApp = GetObject(strDbPath)

            DoEvents

      Loop Until Err.Number = 0

   End If

    

   ' Sample command to open an Access form named "Categories".

   acApp.DoCmd.OpenForm "Categories"

    

   GetSecureDb = True

    

   ' Quit and destroy object variable.

   acApp.Quit

   Set acApp = Nothing

 End Function

 

 

Importación de un archivo de texto en Microsoft Access

 

El método TransferText importa un archivo de texto a Access.

 En este caso, la base de datos

 que va a importar el directorio

 d: \ Datos de programa \ archivo en empTest.txt es

 d: \ Archivos de programa \ Microsoft Office \ Office \ Samples \ Neptuno.mdb. 

El parámetro que sigue acImportDelim es la especificación de archivo. 

Si el archivo es el archivo de texto por defecto, es decir, separados por comas,

 es aceptable omitir la especificación.

 

 

Sub newAccess() 

   Dim objAccess As Access.Application

   Set objAccess =  

      

   New Access.Application  With objAccess

      .OpenCurrentDatabase "d:\Program

      Files\Microsoft Office\Office10\Samples\northwind.mdb"

      .DoCmd.TransferText acImportDelim, , "Employees", "d:\data\empTest.txt", True

      .CloseCurrentDatabase

      .Quit

   End With

   Set objAccess = Nothing

End Sub

 

 

 

Enviar el registro actual de Microsoft Word

El siguiente ejemplo utiliza los marcadores en un documento de Microsoft Word para marcar los lugares donde se desea colocar los datos de un registro en un formulario de Microsoft Access.

 

Creación de un documento de Microsoft Word

Inicie Microsoft Word y crear el nuevo documento lo siguiente:

Apellidos

dirección

Ciudad, Región, Código postal

 

Estimado saludo,

 

Neptuno gustaría darle las gracias por su empleo durante el año pasado.
A continuación encontrará la foto. Si este no es su imagen más actual, por favor háganoslo saber.

 

foto

 

Atentamente,

 

 

 

Neptuno

En Microsoft Word, crear un marcador para cada una de las siguientes palabras:

primero

pasado

dirección

ciudad

región

PostalCode

saludo

foto

Para ello, siga estos pasos:

Seleccione la primera palabra.

En el menú Insertar, haga clic en Marcador.

En el cuadro Nombre del marcador, escriba primero y después haga clic en Agregar.

Repita los pasos 2a a 2c para cada una de las palabras restantes, sustituir esa palabra por el nombre del marcador.

Guarde el documento como C: \ Mis documentos \ MyMerge.doc.

Salir de Word.

El envío de datos a Microsoft Word desde un formulario de Microsoft Access

Inicie Microsoft Access y abra el archivo Neptuno.mdb.

Establecer una referencia a la Biblioteca de objetos de Microsoft Word 10.0. Para ello, siga estos pasos:

Abra cualquier módulo en la vista Diseño.

En el menú Herramientas, haga clic en referencias.

Haga clic para seleccionar Microsoft Word 10.0 Object Library casilla de verificación. Si no ve esta opción, haga clic en Examinar y localice el archivo Msword.olb, que se instala en el directorio C: \ Archivos de programa \ Microsoft Office \ Office10 por defecto.

  1. Haga clic en Aceptar.
  2. Cierre el módulo.
  3. Abra el formulario Empleados en la vista Diseño.
  4. Agregar un botón de comando al formulario y establezca las siguientes propiedades:
  • Botones de comando:
  • Nombre: MergeButton
  • Leyenda: Enviar a Word

OnClick: [Procedimiento de evento]

Establezca la propiedad OnClick del botón de comando con el siguiente procedimiento de evento:

 

Private Sub MergeButton_Click()

 On Error GoTo MergeButton_Err 

 Dim objWord As Word.Application 

 ' Get path of the photo 

 Dim sImagePath As String 

 sImagePath = "" 

 If InStr(2, ImagePath.Value, ":") Or InStr(1, ImagePath.Value, "\") Then

 sImagePath = ImagePath.Value 'path was complete 

 Else ' imagepath is to file in folder of this database  

 sImagePath = Me.Application.CurrentProject.path & "\" & ImagePath.Value 

 End If

  

 'Start Microsoft Word. 

 Set objWord = CreateObject("Word.Application") 

 With objWord ' Make the application visible.  

 .Visible = True  

 ' Open the document.  

 .Documents.Open ("c:\MyDocs\mymerge.doc")  

 ' Move to each bookmark and insert text from the form.  

 .ActiveDocument.Bookmarks("First").Select  

 .Selection.Text = (CStr(Forms!Employees!FirstName))  

 .ActiveDocument.Bookmarks("Last").Select  

 .Selection.Text = (CStr(Forms!Employees!LastName))  

 .ActiveDocument.Bookmarks("Address").Select  

 .Selection.Text = (CStr(Forms!Employees!Address))  

 .ActiveDocument.Bookmarks("City").Select  

 .Selection.Text = (CStr(Forms!Employees!City))  

 .ActiveDocument.Bookmarks("Region").Select 

 .Selection.Text = (CStr(Forms!Employees!Region))  

 .ActiveDocument.Bookmarks("PostalCode").Select  

 .Selection.Text = (CStr(Forms!Employees!PostalCode))  

 .ActiveDocument.Bookmarks("Greeting").Select  

 .Selection.Text = (CStr(Forms!Employees!FirstName))

   

 ' Insert the photo.  

 .ActiveDocument.Bookmarks("Photo").Select  

 .Selection.InlineShapes.addpicture fileName:=sImagePath, _   

 LinkToFile:=False, SaveWithDocument:=True 

 End With

  

 ' Print the document in the foreground so Word 

 ' will not close until the document finishes printing. 

 objWord.ActiveDocument.PrintOut Background:=False 

 ' Close the document without saving changes. 

 objWord.ActiveDocument.Close 

 

 SaveChanges:=wdDoNotSaveChanges 

 ' Quit Microsoft Word and release the object variable. 

 objWord.Quit 

 Set objWord = Nothing

 Exit Sub

 

 MergeButton_Err: 

 ' If a field on the form is empty 

 ' remove the bookmark text and continue. 

 If Err.Number = 94 Then  

 objWord.Selection.Text = ""  

 Resume Next ' If the Photo field is empty.

 ElseIf Err.Number = 2046 Then  

 MsgBox "Please add a photo to this record and try again."  

 Else  

 MsgBox Err.Number & vbCr & Err.Description 

 End If 

 Exit Sub       

End Sub

 

Guarde el formulario Empleados y ábralo en la vista Formulario.

Haga clic en el botón Enviar Word en el formulario Empleados al iniciar Microsoft Word. 

Los datos del registro actual se fusionarán en MyMerge.doc, 

el documento resultante de la fusión se va a imprimir, y el Verbo se cerrará.

NOTA: El marcador se eliminará cuando se inserta el contenido de un campo

 de registro en el documento de Word. 

Si usted necesita para hacer referencia al texto que ha introducido en el documento, se debe marcar.

 El código de ejemplo siguiente se agrega el marcador "final" en el texto insertado

 en el campo Apellidos.

 

 .ActiveDocument.Bookmarks("Last").Select

   .Selection.Text = 

    (CStr(Forms!Employees!LastName)) ' add this line to reapply the bookmark name to

   the selection.ActiveDocument.Bookmarks.AddName:="Last",Range:=Selection.Range

 

 

Automatización con la versión en tiempo de ejecución de Microsoft Access

Para el control de una instalación en tiempo de ejecución de acceso a través de la automatización en la versión comercial del programa no está instalado, tenga en cuenta estas consideraciones especiales:

 

Un ejemplo en tiempo de ejecución de Access, si no se está ejecutando, se requiere una base de datos. Por lo tanto, utilizar la función Shell, y especificar la ruta a Msaccess.exe y la base de datos que desea abrir.

Después de iniciar la instancia en tiempo de ejecución, utilice la función GetObject para referirse a la instancia. (GetObject sólo funciona con una instancia en tiempo de ejecución si la instancia se está ejecutando.)

Traer la instancia a la vista sólo cuando una base de datos está abierta. Si una base de datos no está abierto en la instancia en tiempo de ejecución y de intentar traer a la vista, el caso aparece en la pantalla brevemente y luego se minimiza.

Utilice el método Quit para terminar una instancia en tiempo de ejecución (por ejemplo, objAccess.Quit).

El procedimiento de ejemplo siguiente establece una variable de nivel de módulo, objAccess, para referirse a una instancia de Access. El primer código intenta utilizar GetObject para referirse a una instancia que ya esté abierto y que contiene la base de datos (dbpath). Si la base de datos no está abierto en una instancia de Access, una nueva instancia de la versión completa de Access se abre. Si la versión completa de Access no está instalado, la función Shell inicia una instancia en tiempo de ejecución de Access. Después de la instancia se abre, puede utilizar los métodos y CloseCurrentDatabase OpenCurrentDatabase para trabajar con otras bases de datos.

 

 

Sub OpenRunTime() 

   Dim accpath As String, dbpath As String 

   On Error Resume Next 

   dbpath = "C:\Program Files\MyApp\MyApp.mdb"

   Set objAccess = GetObject(dbpath)

   If Err <> 0 Then 

      If Dir(dbpath) = "" Then 

         'dbpath is not valid 

         MsgBox "Couldn't find database." 

         Exit Sub 

      Else 'The full version of Microsoft Access is not installed.

         accpath = "C:\Program Files\Microsoft Office\Art\Office\Msaccess.exe"

         If Dir(accpath) = "" Then 

            MsgBox "Couldn't find Microsoft Access." 

            Exit Sub 

         Else Shell pathname:=accpath & " " & Chr(34) & dbpath & Chr(34),windowstyle:=6

            Set objAccess = GetObject(dbpath) 

         End If 

      End If 

   End If 

End Sub

 

Comprensión de las propiedades UserControl y visible 

 

Cuando el usuario inicia una aplicación, las propiedades Visible y UserControl del objeto Application están establecidos en True. Cuando la propiedad UserControl se establece en True, no es posible establecer la propiedad Visible del objeto Application en False. 

 

Cuando un objeto de aplicación se crea utilizando la automatización, las propiedades Visible y UserControl del objeto Application se establecen en falso. 

 

Si UserControl es True, y un comando no válido se pasa a la instancia de Access, Access no suprime su propio mensaje de alerta, y la instancia de Access no se termina cuando la variable de objeto se establece en Nothing o pierde su ámbito. 

 

Esta propiedad es de sólo lectura en todos los puntos de vista cuando un usuario inicia acceso. Si el acceso se inicie mediante automatización OLE, la propiedad UserControl se puede establecer en Visual Basic. 

 

Microsoft Access puede cambiar la propiedad UserControl en True si la instancia se llevó a la vista por otros medios de establecer la propiedad Visible del objeto Application en True. Sin embargo, si ya es una realidad visible era antes de la instancia fue llevada a la vista, UserControl y visible no cambian. Por ejemplo, usted tiene una variable de objeto público, objAccess, que se refiere a una instancia de Access. Ningún código es actualmente la manipulación de la instancia, y sus propiedades UserControl y visible son falsas. Si entonces activar esa instancia de Access (haciendo clic sobre su icono en la barra de tareas de Windows), sus propiedades UserControl y visible se hacen realidad. La propiedad UserControl de la instancia se mantiene fiel hasta que el programa se termina (por la salida haciendo clic en el menú Archivo, por ejemplo). Después de la instancia se termina, se ejecuta minimizado en lugar de realmente terminó siendo, porque todavía objAccess se refiere a ella. Ahora, sus propiedades UserControl y visible se Falso de nuevo. 

 

Comprensión de la propiedad UserControl y si la instancia pueden haber sido creados por el usuario es importante, porque esto afecta la instancia se llevó a la vista y la forma en que se termina. Por ejemplo, si UserControl es True o la instancia fue creada por un usuario, no se puede establecer su propiedad Visible para llevar el caso a la vista. Además, si usted desea terminar una instancia cuya UserControl propiedad es True, debe utilizar el método Quit. Para más información, consulte Uso de las llamadas API para llevar el acceso a Microsoft en Vista y finalización de la instancia de Microsoft Access.  

Utilizando llamadas a la API para llevar el acceso a Microsoft en Vista

 

Para traer una nueva instancia de Microsoft Access a la vista, se puede establecer su propiedad Visible en True. Sin embargo, no se puede establecer la propiedad visible de una instancia existente de Microsoft Access, o una instancia de Microsoft Access, cuya propiedad es True UserControl. La propiedad Visible es de sólo lectura cuando la propiedad UserControl es True.

 

La propiedad UserControl es True si el usuario inició Microsoft Access manualmente, fuera del contexto de su código. Incluso si la instancia se creó mediante la automatización y la propiedad UserControl es falso, estableciendo su propiedad Visible en True no trae la instancia en la vista si la propiedad Visible ya era verdadera, y el caso fue minimizado por el usuario.

 

Para llevar de forma fiable una instancia existente a la vista, el uso de la SetForegroundWindow o llame ShowWindow API. Con el procedimiento ShowAccess, se le pasa la variable de objeto que hace referencia a una instancia de Access, y que lleva el caso a la vista. Esto funciona si la instancia es nueva o ya existente y también permite una ventana opcional "tamaño" argumento (por ejemplo, para mostrar el ejemplo máximo).

 

 

 

Option Explicit

 

'The following Declare and Const statements are for the ShowAccess procedure.

 

Private Declare Function SetForegroundWindow Lib "User32" (ByVal hWnd As Long) As Long

Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function IsIconic Lib "User32" (ByVal hWnd As Long) As Long

 

Const SW_NORMAL = 1     'Show window in normal size

Const SW_MINIMIZE = 2   'Show window minimized

Const SW_MAXIMIZE = 3   'Show window maximized

Const SW_SHOW = 9       'Show window without changing window size

 

Dim objAccess As Access.Application

 

Sub ShowAccess(instance As Access.Application, Optional size As Variant)

    'Brings the instance of Access referred to by "instance" into view.

    'Size can be SW_NORMAL(1), SW_MINIMIZE(2), SW_MAXIMIZE(3), or

    'SW_SHOW(9).

    

    'If size is omitted, the size of the Access window is not changed

    '(SW_SHOW).

    'Calling example:

    '

    'ShowAccess instance:=objAccess, size:=SW_SHOW

 

    Dim hWnd As Long, temp As Long

    If IsMissing(size) Then size = SW_SHOW

    On Error Resume Next 'temporary error handler

 

    'Note: An error in the client occurs if you try to set the visible

    'property of an instance of Access created by the user, regardless of its

    'UserControl setting. This is the reason for the temporary error

    'handling for the following line:

 

    If Not instance.UserControl Then instance.Visible = True

    On Error GoTo 0 'turn off error handler

 

    hWnd = instance.hWndAccessApp

 

    temp = SetForegroundWindow(hWnd)

    If size = SW_SHOW Then 'keep current window size

        If IsIconic(hWnd) Then temp = ShowWindow(hWnd, SW_SHOW)

 

    Else

        If IsIconic(hWnd) And size = SW_MAXIMIZE Then temp = _

            ShowWindow(hWnd, SW_NORMAL)

        temp = ShowWindow(hWnd, size)

    End If

End Sub

 

Sub StartAccess()

   Set objAccess = CreateObject("Access.Application")

   objAccess.OpenCurrentDatabase _

        ("C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb")

   ShowAccess objAccess, SW_MAXIMIZE

End Sub

 

 

 Ejemplo del uso de una grabadora de Aplicación

Este ejemplo muestra cómo se graba una nueva macro de Microsoft Word y cómo tomar el código generado y lo convierten en código de automatización para su uso en Microsoft Access.

 

En Microsoft Word, siga estos pasos:

En el menú Herramientas, seleccione Macro y, a continuación, haga clic en Grabar nueva macro.

El nombre de la macro MyMacro y haga clic en Aceptar. La barra de herramientas Detener grabación aparece, sino que contiene un botón de pausa y un botón Detener grabación. Que va a utilizar esta barra de herramientas más tarde cuando se desea detener la grabación.

  1. En el menú Archivo, haga clic en Nuevo.
  2. En el panel de tareas Nuevo documento, haga clic en Documento en blanco.
  3. Escriba Esto es una prueba de grabación de macros.
  4. En el menú Edición, haga clic en Seleccionar todo.
  5. En el menú Formato, haga clic en Fuente. En la lista Fuente, haga clic en Arial y haga clic en Aceptar.
  6. En la barra de herramientas Detener grabación, haga clic en el botón Detener grabación.
  7. En el menú Herramientas, seleccione Macro y, a continuación, haga clic en Macros.

Haga clic en MyMacro y luego haga clic en Editar.
El Editor de Visual Basic y muestra la macro grabada. Debe tener un aspecto similar al siguiente:

 

Sub MyMacro ()

'MyMacro Macro

'Macro recorded on 12/20/2002 by Scott Culp.

 

    Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0

    Selection.TypeText Text:="This is a macro recording test."

    Selection.WholeStory

    With Selection.Font

        .Name = "Arial"

        .Size = 12

        .Bold = False

        .Italic = False

        .Underline = wdUnderlineNone

        .UnderlineColor = wdColorAutomatic

        .Strikethrough = False

        .DoubleStrikeThrough = False

        .Outline = False

        .Emboss = False

        .Shadow = False

        .Hidden = False

        .SmallCaps = False

        .AllCaps = False

        .Color = wdColorAutomatic

        .Engrave = False

        .Superscript = False

        .Subscript = False

        .Spacing = 0

        .Scaling = 100

        .Position = 0

        .Kerning = 0

        .Animation = wdAnimationNone

    End With

End Sub

 

En el menú Edición, haga clic en Seleccionar todo. En el menú Edición, haga clic en Copiar.

Cierre Microsoft Word y no guarde los cambios al documento.

Inicie Microsoft Access y luego siga estos pasos:

Abrir o crear una nueva base de datos.

En el menú Herramientas, seleccione Macro y, a continuación, haga clic en Editor de Visual Basic.

En el menú Insertar, haga clic en módulo.

En el menú Herramientas, haga clic en referencias. En la lista Referencias disponibles, haga clic para seleccionar Microsoft Word 10.0 Object Library casilla de verificación, a continuación, haga clic en Aceptar.

Pegue el código en el módulo.

Cambie el código para que se automatizar Word. Para ello, añadir una variable de objeto y usarlo para crear una instancia de Word. Luego agregar la variable de objeto al principio de cada línea de la macro de Word, como se muestra en la siguiente:

 

Sub MyMacro ()

'MyMacro Macro

'Macro recorded on 12/20/2002 by Scott Culp.

'

   'Add the following 3 lines of code to create the instance of Microsoft

   'Word and make the instance visible.   

   Dim wordApp As Word.Application

 

   Set wordApp = CreateObject("Word.Application")

   wordApp.Visible = True

 

   'Append the object variable to each line of code that uses a 

   'Microsoft Word command.   

 

    With wordApp

 

    Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0

    Selection.TypeText Text:="This is a macro recording test."

    Selection.WholeStory

    With Selection.Font

        .Name = "Arial"

        .Size = 12

        .Bold = False

        .Italic = False

        .Underline = wdUnderlineNone

        .UnderlineColor = wdColorAutomatic

        .Strikethrough = False

        .DoubleStrikeThrough = False

        .Outline = False

        .Emboss = False

        .Shadow = False

        .Hidden = False

        .SmallCaps = False

        .AllCaps = False

        .Color = wdColorAutomatic

        .Engrave = False

        .Superscript = False

        .Subscript = False

        .Spacing = 0

        .Scaling = 100

        .Position = 0

        .Kerning = 0

        .Animation = wdAnimationNone

    End With

End With

End Sub

 

Ahora ya está listo para ejecutar el procedimiento de automatización de acces.

 

************************************************************************

 

Referencia a un objeto de automatización

Las siguientes dos funciones se pueden utilizar para hacer referencia a un objeto de automatización:

 

CreateObject - Crea una referencia a un objeto de automatización.

GetObject - Activa un objeto que se ha guardado en un archivo o una referencia a una aplicación de servidor que se está ejecutando.

 

La función CreateObject

El siguiente código utiliza CreateObject para iniciar la aplicación Word y crear una instancia de la aplicación de Word:

 

Dim wordApp as Object

Set wordApp = CreateObject ("Word.Application")

 

 

 

La función GetObject

La función GetObject se activa un objeto que se ha guardado en una aplicación de servidor de disco o referencias que ya se está ejecutando. En el siguiente ejemplo se activa un archivo guardado:

 

'Activate a saved file.

Dim xlApp as Object

Set xlApp = GetObject("C:\My Documents\MyFile.xls", "Excel.Sheet")

 

 

El ejemplo siguiente se activa una aplicación que ya se está ejecutando:

 

Activar una aplicación que ya se está ejecutando

 

Dim xlApp as Object

Set xlApp = GetObject(,"Excel.Application")

 

 

 

La nueva palabra clave

Nueva es una palabra clave que permite la creación implícita de un objeto. Si utiliza New al declarar una variable de objeto, una nueva instancia del objeto se crea en la primera referencia a la misma, por lo que no tiene que utilizar la instrucción Set para asignar la referencia al objeto.

 

'Crear una nueva instancia de un objeto de documento de Word.

Dim wordApp as New Word.Document

 

 

No se recomienda que utilice la nueva palabra clave para la automatización de Word y Excel. Para más información, consulte el siguiente artículo en Microsoft Knowledge Base:

 

Q213702 XL2000: No se puede utilizar la palabra clave New para crear objeto Workbook

 

*********************

usar referencias

El cuadro de diálogo Referencias se puede utilizar para añadir o eliminar las bibliotecas de su Visual Basic para Aplicaciones.

 Por ejemplo, si desea utilizar código de automatización para controlar Microsoft Excel con el enlace anticipado, 

hace referencia a la Microsoft Excel 10.0 Object Library. Para ver los objetos, métodos y propiedades de esta biblioteca,

 puede utilizar el Examinador de objetos. En el Editor de Visual Basic, haga clic en Examinador de objetos en el menú Ver.

*********************

 

Enlace en tiempo de ejecucion

Enlace en tiempo declara una variable como un identificador de programa (ProgID) y no como un objeto o una variante. La variable se inicializa mediante el CreateObject o la función GetObject, o con la palabra clave New, si el servidor de automatización y control de las aplicaciones lo soportan.

 

Sub ProcessFile()

 

    Dim xlApp As Excel.Application

    Dim xlBook As Excel.Workbook

  

    Set xlApp = CreateObject("Excel.Application")

    xlApp.Visible = True

    Set xlBook = xlApp.Workbooks.Open(Filename:="E:\Test\TestFile.CSV")

    xlBook.SaveAs Filename:="E:\Test\TestFile.XLS", FileFormat:=xlWorkbookNormal

    xlBook.Close

    Set xlSheet = Nothing

    Set xlBook = Nothing

    xlApp.Quit

    Set xlApp = Nothing

 

End Sub

 

Enlace anticipado es el nombre descriptivo de lo que los programadores de C llamada unión virtual de la tabla de funciones, o la Tabla V de unión. Para utilizar el enlace anticipado, la aplicación de control debe establecer una referencia a una biblioteca de tipos (. TLB), la biblioteca de objetos (. OLB), o biblioteca de vínculos dinámicos (. DLL) que define los objetos, métodos y propiedades de la servidor de aplicaciones.

 

Beneficios de enlace en tiempo de

Rendimiento: Dependiendo de lo que su código está haciendo, la unión temprana puede mejorar significativamente la velocidad de su código.

En tiempo de compilación comprobación de sintaxis: Los errores de sintaxis que se realicen en el código de automatización de error en tiempo de compilación en lugar de en tiempo de ejecución.

Legibilidad del código: Al declarar variables de objeto como un tipo específico, sólo puede echar un vistazo a las declaraciones para determinar qué objetos utiliza un procedimiento en particular.

Visualización de objetos: Cuando se establece una referencia a la biblioteca de tipos de una aplicación, sus objetos y sus propiedades y métodos se muestran en el Explorador de objetos. Para saber qué propiedades y métodos disponibles para un objeto en particular, simplemente marque el Examinador de objetos.

Cómo obtener ayuda: Usted puede obtener ayuda en el modelo de objetos de otra aplicación desde el Explorador de objetos, en lugar de tener que iniciar la aplicación en sí.

************************************************************************

 

Enlace en tiempo declara una variable como un objeto o una variante. La variable se inicializa llamando a la función GetObject o CreateObject y especificar el identificador de programación (ProgID). Por ejemplo:

 

Sub ProcessFile()

 

    Dim xlApp As Object

    Dim xlBook As Object

  

    Set xlApp = CreateObject("Excel.Application")

    xlApp.Visible = True

    Set xlBook = xlApp.Workbooks.Open(Filename:="E:\Test\TestFile.CSV")

    xlBook.SaveAs Filename:="E:\Test\TestFile.XLS", FileFormat:=xlWorkbookNormal

    xlBook.Close

    Set xlSheet = Nothing

    Set xlBook = Nothing

    xlApp.Quit

    Set xlApp = Nothing

 

End Sub

 

Enlace en tiempo fue el primer método de unión implementado en los productos de controlador de automatización. Enlace en tiempo es el nombre descriptivo de lo que los programadores de C llamada IDispatch enlace basado. Se utiliza una gran cantidad de gastos generales y es más rápido que el intercambio dinámico de datos (DDE), pero más lento que el enlace anticipado. Enlace en tiempo está disponible en todos los productos que son capaces de ser un controlador de automatización.

 

*************************************************************************

 

Para crear los objetos de Access de Microsoft

 

Enumerados en la siguiente tabla, utilice uno de los correspondientes identificadores de programación OLE. 

Si utiliza un identificador sin sufijo número de versión, se crea un objeto en la versión más reciente de acceso disponibles en el equipo donde se ejecuta el código.

 

To create this object Use this identifier 

Application  Access.Application, Access.Application.10 

CurrentData  Access.CodeData, Access.CurrentData 

CurrentProject  Access.CodeProject, Access.CurrentProject 

DefaultWebOptions Access.DefaultWebOptions 

 

La destrucción de objetos de automatización

Una variable de objeto de automatización normalmente se destruye cuando se pierde su ámbito. Por ejemplo, si se declara una variable local a un procedimiento y lo puso a un objeto de automatización, que el objeto se destruye cuando se termina el procedimiento, porque el alcance de la variable se limitó sólo a la intervención. Del mismo modo, una variable de objeto de automatización no se destruye cuando se difumina como una variable pública, a menos que la variable se reinicializa o destruidas de manera explícita.

 

Para destruir explícitamente una variable de objeto de automatización, se establece en la nada de palabras clave, como lo demuestra lo siguiente:

 

Public accessApp As Object

Sub DestroyIt()

 

   Set accessApp = CreateObject("Access.Application")

      ' do something important...

      ' destroy the object

   Set accessApp = Nothing

   

End Sub

 

 

Tenga en cuenta que con algunos servidores de automatización, el establecimiento de un objeto variable a nada, no necesariamente cerca de la aplicación de servidor. Si está utilizando la función CreateObject para crear una instancia de un servidor de automatización, asegúrese de usar un método definido por el servidor para dejar de fumar, si es posible, a continuación, establecer la variable de objeto a la nada. Si no, el código puede ser salir de varias sesiones del servidor de automatización abierta. Esto es muy común cuando la automatización de Microsoft Excel.

 

Para cerrar la aplicación, utilice el método Quit antes de establecer la variable de objeto fuera de su alcance, como lo demuestra el siguiente:

 

Public xlApp As Object

 

Sub DestroyIt()

   Set xlApp = CreateObject("Excel.Application")

   ' Do something important...

   ' Quit the application object.

   xlApp.Quit

      ' Destroy the object.

   Set xlApp = Nothing

   

End Sub

 

 

Solución de problemas error 429 al automatizar aplicaciones de Office

Cuando se utiliza el operador New o la función CreateObject de Visual Basic para crear una instancia de una aplicación de Office, puede obtener el siguiente error:

 

Error en tiempo de ejecución '429 ': el componente ActiveX no puede crear el objeto.

Este error se produce cuando el objeto de automatización solicitada no puede ser creado por COM y por lo tanto no está disponible para Visual Basic. El error se suele ver en algunos equipos, pero otros no.

 

A diferencia de algunos errores en Visual Basic, no hay una única causa de un error 429. El problema se produce debido a un error en la aplicación o la configuración del sistema o un componente que falta o está dañado. Encontrar la causa exacta es una cuestión de posibilidades de eliminar. Para sugerencias para resolver problemas y ayudar a diagnosticar y resolver las causas de este error, consulte el siguiente artículo en Microsoft Knowledge Base:

 

Q244264 INFORMACIÓN: Error 429 al automatizar aplicaciones de Office 

Contacto

Pablo D. Cuenca
Buenos Aires
Argentina

© 2009-20 Todos los derechos reservados. ideaspcsoft@hotmail.com

Crea una página web gratisWebnode