¿Cómo pegar valores desde excel a Access usando VBA?

Les escribo porque me interesa hacer un botón en un formulario en access que permita modificar un formulario en forma de hoja de datos desde access, tengo un botón en el formulario de access que abre un excel y pega los valores del formulario. Este funciona así:

Dim xlApp As Object
Dim xlWB As Object
Dim xlWS As Object
Dim xlWS2 As Object
Dim Ruta As String
Dim acApp As Access.Application
    Me.sfmSupplierOffer.SetFocus
    DoCmd.RunCommand acCmdSelectAllRecords
    DoCmd.RunCommand acCmdCopy
    Set xlApp = CreateObject("excel.application")
    Ruta = Application.CurrentProject.Path & "\Documentos\Cost Input.xlsx"
        xlApp.Visible = True
        Set xlWB = xlApp.Workbooks.Open(Ruta)
        'Set xlWS = xlWB.Sheets("PC")
        'Set xlWS2 = xlWB.Sheets("BackEnd1")
        Set xlWS = xlWB.Sheets(1)
        xlWB.Activate
        xlApp.Visible = True
        xlWS.range("A8").Select
        xlApp.Visible = True
        xlWS.range("A8").PasteSpecial xlPasteValues
End Sub

la cuestion es que necesito uno en esa hoja ya abierta que haga lo mismo pero al revez (exportar de excel al formualario de access que se encuentre abierto.

1 Respuesta

Respuesta
1

[Hola

A ver, si mal no te entendí, tienes un formulario en Access desde el cual copias y pegas los registros de un sub formulario a un archivo específico de Excel.

Lo que quieres ahora es que esos registros que están en Excel sean modificados y mediante una macro se envíen al sub formulario del formulario activo de Access ¿es eso? Si tu respuesta es sí temo decirte que no se puede, estás mal entendiendo la forma en que funcionan los sub formularios en Access. Es más, intenta (de modo manual) copiar lo de Excel y pegarlo en tu sub formulario de Access ¿notas lo que ocurre?

La forma correcta es que uses (desde el VBA de Excel), por ejemplo ADO, y mediante SQL, y usando Update, actualices la tabla correspondiente y luego con un Requery en Access, se actualicen los registros del sub formulario. Para el Update tienes que usar, de preferencia, el campo que sirve de índice, el cual al menos desde aquí, no se puede identificar.

Abraham Valencia

Pues soy un novato total en esto de VBA y access pero lamento decirte que si es posible. si copio desde Excel y los pego en el formulario de Access funciona perfectamente. haciendolo de modo manual como dices tu.

Como hago para hacer referencia a la base de datos que esta abierta desde Excel??? 

Si haces solo copiar/pegar, todo se va a un solo campo, pero ya te entendí mejor, aunque no lo mencionaste asumo que quieres hacer algo tipo Pegado Especial de datos anexados ¿cierto? De ser asi, yo no creo que sea lo mejor, pero algo tengo en mi "baúl de los recuerdos". En unas horas retorno a casa y lo veo. Ah, ve leyendo sobre "GetObject" y "AppActivate".

Abraham Valencia

Correcto, esto si me suena más.

Espero tu respuesta. Saludos.

Listo, ya en casa. A ver, primero que nada debes activar las referencias a "Microsoft Access xx.x Object Library" (en donde xx. X es el número de tu versión de Office) . Ojo, lo voy a enviar por partes para que lo vayas adaptando y he de asumir que el último formulario abierto de Access (y activo) es aquel en dónde se van a pegar los datos y que es la única base de datos abierta también.

Primero desde el Excel vamos a "hallar" el archivo de Access abierto y "capturarlo":

AppAccess. Forms("Nombredelformulario").Subformulario_Nombredelsubformulario. SetFocus
AppAccess. DoCmd. RunCommand acCmdPasteAppend

Evidentemente tú tienes que colocar tu ruta y nombre del archivo. Como asumo que ya copiaste los datos, luego lo que hace falta es darle el foco al subformulario y pegar todo como datos anexados:

AppAccess. Forms("Nombreformulario").Subformulario_Nombresubformulario. SetFocus
AppAccess. DoCmd. RunCommand acCmdPasteAppend

Si quieres que se active el Access, usa esto:

Application. ActivateMicrosoftApp xlMicrosoftAccess

Ah, ojo, si tienes las alertas activadas del Access te preguntará si estás seguro de pegar los registros, sugiero desactivarlas (también puede ser con el objeto Access como trabajo aquí).

Saludos]

Abraham Valencia

Me indica este error: 

Sub Button1_Click()
AppAcess.Forms("Form1").Exceltxt.SetFocus
End Sub

[Hola

Acabo de ver que copie mal. Mira, todo el código es así:

Dim appAccess As Object
Set appAccess = GetObject(ThisWorkbook.Path & "\BD.accdb")
AppAccess. Forms("Nombreformulario").Subformulario_Nombresubformulario. SetFocus
appAccess. DoCmd. RunCommand acCmdPasteAppend
Application. ActivateMicrosoftApp xlMicrosoftAccess

Prueba ahora. OJO, no olvides que ese código es en VBA de Excel.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas