es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El comando .transferspreadsheet está enviando datos antiguos de Excel a Access.

Estoy utilizando cmd.transferspreadsheet en Excel VBA para importar una hoja de Excel en una tabla de Access. Cada vez que ejecuto este código, los datos enviados a Access están desactualizados en 1 iteración. Me he centrado en dos columnas, una que tiene una asignación de nivel (columna 4) y otra que tiene una cadena para el tiempo y la persona que está enviando (columna 13). Al revisar el código, estoy imprimiendo los valores de estas 2 columnas en la ventana inmediata. Lo hago tanto mediante una referencia de rango como mediante una referencia de objeto. Ambos me dan la respuesta correcta, pero cuando entro en Access, veo los datos que estaban allí antes de que los cambiara. ¿Qué estoy haciendo mal?!?!?!

“`
Sub SendTiersToDB()

‘sends the data from this file to the access database

Dim fPathName As String
Dim dbTblTiers As String
Dim strSubmit As String
Dim tblXLTiers As ListObject
Dim strXLTiers As String
Dim appDB As New Access.Application

Set tblXLTiers = Sheet7.ListObjects(1)

fPathName = “\MERCH\Assortment Planning\Databases\NewAPDatabase.accdb”
strXLTiers = tblXLTiers.DataBodyRange.Address
dbTblTiers = “Tbl_Tiers”

'Fill In Subbmission Data
 strSubmit = "Last Submitted: " & Now & " by " & Environ("username")
 tblXLTiers.ListColumns(13).DataBodyRange.Value = strSubmit
 tblXLTiers.ListColumns(13).DataBodyRange.Calculate

'and insert the new store records
Debug.Print "By Range " & Sheet7.Range("D2").Value
Debug.Print "By Range " & Sheet7.Range("M2").Value
Debug.Print "By Object " & tblXLTiers.DataBodyRange(1, 4)
Debug.Print "By Object " & tblXLTiers.DataBodyRange(1, 13)
appDB.OpenCurrentDatabase fPathName
appDB.DoCmd.TransferSpreadsheet _
    TransferType:=acImport, _
    SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
    TableName:=dbTblTiers, _
    Filename:="https://theexcelfilepath/file.xlsb", _
    HasFieldNames:=True, _
    Range:=Sheet7.Name & "$" & "A1:O9277"

End Sub

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el cálculo de los datos en la columna 13. Aunque estás calculando el valor de esa columna después de actualizarlo con los datos enviados, el valor que se envía a la base de datos de Access sigue siendo el valor antiguo.

    Puede que necesites intentar forzar un recálculo de toda la hoja de cálculo antes de ejecutar el comando cmd.transferspreadsheet. Puedes hacer esto añadiendo la línea “tblXLTiers.Parent.Recalc” antes de la línea appDB.DoCmd.TransferSpreadsheet.

    Alternativamente, puedes intentar añadir un retraso antes de ejecutar el comando cmd.transferspreadsheet para asegurarte de que los cálculos se han completado antes de enviar los datos a Access. Puedes hacer esto añadiendo la línea “Application.Wait (Now + #0:00:05#)” antes de la línea appDB.DoCmd.TransferSpreadsheet para añadir un retraso de 5 segundos.

    Por último, asegúrate de que no estás sobrescribiendo accidentalmente los datos de Access con una versión antigua del archivo de Excel. Comprueba que estás referenciando la ruta de archivo correcta y que es la versión más actualizada del archivo.

Comments are closed.