MS Access VBA script para interactuar con Excel

Estoy tratando de escribir un script de VBA en Microsoft Access que interactuará con una hoja de Excel, recorrerá las filas y luego las celdas de la fila, y luego recuperará la información en la tabla de Access.

Aquí hay un código sudo-

For Each Row
    For Each Cell in the Row
        Read the Cell
        Create a new Record in the Access table with the info from the cell
    End For Each
End For Each

Puede ver un ejemplo simplificado del resultado final en las siguientes imágenes.

Que tenemos-

enter image description here

Qué se necesita-

enter image description here

He codificado antes, pero nunca en VBA; ¡Por lo que cualquier ayuda se agradece! ¡¡¡Gracias por tu ayuda!!!

preguntado el 12 de junio de 12 a las 16:06

por favor lea lo que Remou escribió, ya existe un método integrado para hacerlo. Incluso sería mejor leer el rango en una matriz en lugar de recorrer cada celda. -

2 Respuestas

Primero cree un enlace a su hoja de cálculo de Excel como sugirió @Remou. En el siguiente ejemplo, nombré el enlace como "tblExcelData". Luego, "tblDestination" almacenará un registro separado para cada "celda" de una fila de la hoja de trabajo como lo solicitó. En tblDestination, Seq# es un entero largo, y Field Name y Field Value ambos son texto.

Public Sub foo20120612a()
    Dim db As DAO.Database
    Dim rsSrc As DAO.Recordset
    Dim rsDest As DAO.Recordset
    Dim fld As DAO.Field

    Set db = CurrentDb
    Set rsSrc = db.OpenRecordset("tblExcelData", dbOpenSnapshot)
    Set rsDest = db.OpenRecordset("tblDestination", _
        dbOpenTable, dbAppendOnly)
    Do While Not rsSrc.EOF
        For Each fld In rsSrc.Fields
            If fld.Name <> "Seq#" Then
                With rsDest
                    .AddNew
                    ![Seq#] = CLng(rsSrc![Seq#])
                    ![Field Name] = fld.Name
                    ![Field Value] = fld.value
                    .Update
                End With
            End If
        Next fld
        rsSrc.MoveNext
    Loop
    rsDest.Close
    Set rsDest = Nothing
    rsSrc.Close
    Set rsSrc = Nothing
    Set db = Nothing
End Sub

Respondido el 12 de junio de 12 a las 17:06

Le sugiero que vincule la hoja de Excel usando varios asistentes o el método TransferSpreadsheet de DoCmd y simplemente ejecute consultas de acción usando la tabla de Excel vinculada.

Una consulta de unión es lo que se requiere. Llamemos a su hoja de cálculo vinculada t.

SELECT * INTO Table1
FROM (
    SELECT [Seq#], "Name" As [Field Name], [Name] As [Field Value]
    FROM t
    UNION ALL
    SELECT [Seq#], "Location" As [Field Name], [Location] As [Field Value]
    FROM t
    UNION ALL
    SELECT [Seq#], "Car" As [Field Name], [Car] As [Field Value]
    FROM t ) imp

INSERT INTO Table1
SELECT * FROM (
    SELECT [Seq#], "Name" As [Field Name], [Name] As [Field Value]
    FROM t
    UNION ALL
    SELECT [Seq#], "Location" As [Field Name], [Location] As [Field Value]
    FROM t
    UNION ALL
    SELECT [Seq#], "Car" As [Field Name], [Car] As [Field Value]
    FROM t ) imp

Puede hacer la vida más fácil si se deshace de los espacios y las palabras reservadas en los nombres de sus campos y columnas.

Por lo general, es mejor enumerar los campos que usar un asterisco (*) como se muestra arriba.

Respondido el 12 de junio de 12 a las 17:06

He usado el asistente para extraer datos de Excel y funcionó muy bien. Sin embargo, nunca antes había usado consultas de acción para organizar datos. ¿Puede explicar un poco cómo usar las consultas de acción para formatear los datos de la forma en que se muestran las imágenes? - oh Dios mío

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.