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.
- Haga clic en Aceptar.
- Cierre el módulo.
- Abra el formulario Empleados en la vista Diseño.
- 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.
- En el menú Archivo, haga clic en Nuevo.
- En el panel de tareas Nuevo documento, haga clic en Documento en blanco.
- Escriba Esto es una prueba de grabación de macros.
- En el menú Edición, haga clic en Seleccionar todo.
- En el menú Formato, haga clic en Fuente. En la lista Fuente, haga clic en Arial y haga clic en Aceptar.
- En la barra de herramientas Detener grabación, haga clic en el botón Detener grabación.
- 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