Importación de un excel a access

Tengo una duda conm respecto a importar un archivo de excel a access

Tengo el siguiente código

Private Sub cm_ObtieneExcel_Click()
On Error GoTo msgboxerror:
Dim myTabla As TableDef
Dim sTablaOrigen$, sTablaDestino$
Dim librocrm$
Dim sConnect As String, sconnect1 As String, sSQL As String
Dim jb As Database, dbActiva As Database, base As Database
Dim PASS As Recordset, PASSS As Recordset, pax As Recordset
Dim intWhere As Integer
Dim WBLIBRO As Object
Set base = CurrentDb ' conecta a base de datos
Application.FileDialog(msoFileDialogOpen).Show
DoCmd.Hourglass True
librocrm = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) ' ABRE VENTANA PARA SELECCIONAR ARCHIVO
LIBRO2 = librocrm ' almacena cadena en cuadro de texto libro2
With LIBRO2
intWhere = InStr(.Value, "SELL IN") ' busca en dicho cuadro la palabra semana
If intWhere Then
.SetFocus
LIBRO2 = "SELL IN" & ".XLSM" ' si la encuentra cambia el valor de libro2 por semana.xls
Else
MsgBox "Alerta, este archivo no es el que nececito para importar", vbCritical, "Error en carga de Archivo" ' si no lo encuentra avisa al usuario que no es el archivo que requiere
End If
End With
If LIBRO2 = "SELL IN.XLSM" Then
OPCIONES = Form.Name
Formulario1 = et_Opc1.Caption
DoCmd.OpenQuery "cn_LimpiaTabSellin", acViewNormal 'Limpia la tabla de paso tab_Sell In
Set WBLIBRO = CreateObject("Excel.Application") ' abre el archivo para verificar y cambiar el formato del concentrado y asi cargar la informacion correctaemtne
'WBLIBRO.Visible = True
WBLIBRO.Workbooks.Open (librocrm)
With WBLIBRO.ActiveSheet
WBLIBRO.Range("a2").Select
lastrow = WBLIBRO.Selection.End(xldown).Row
WBLIBRO.Columns("a").Select
WBLIBRO.Selection.NumberFormat = "#"
WBLIBRO.Columns("b").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("c").Select
WBLIBRO.Selection.NumberFormat = "#"
WBLIBRO.Columns("d").Select
WBLIBRO.Selection.NumberFormat = "dd/mm/yyyy"
WBLIBRO.Columns("e").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("f").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("g").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("h").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("i").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("j").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("k").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("l").Select
WBLIBRO.Selection.NumberFormat = "#"
WBLIBRO.Columns("m").Select
WBLIBRO.Selection.NumberFormat = "#"
WBLIBRO.Columns("n").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("o").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("p").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("q").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("r").Select
WBLIBRO.Selection.NumberFormat = "@"
WBLIBRO.Columns("s").Select
WBLIBRO.Selection.NumberFormat = "@"
End With
WBLIBRO.ActiveWorkbook.Close Savechanges:=True ' cierro libro y guardo cambios
WBLIBRO.Application.Quit 'Con esto cierro el Excel
Set WBLIBRO = Nothing
' Abro la hoja de cálculo
Set jb = OpenDatabase(librocrm, False, False, "Excel 8.0; HDR=Yes;")
sTablaOrigen = "[SELL IN$A1:S" & lastrow & "]"
sConnect = "'" & CurrentProject.Path & "\" & CurrentProject.Name & "'"
sSQL = "INSERT INTO Tab_Temp_Sell_In IN " & sConnect & " SELECT * FROM " & sTablaOrigen ' inserto datos de la hoja seleccionada en stablaorigen en la tabla tabtem_expedientes
jb.Execute sSQL
jb.Close
DoCmd. OpenForm "FRM_TEMPORALEXPORTACION" ' se abre formulario temporal para confirmar datos cargados
Forms![frm_temporalexportacion]![importa] = lastrow - 1
Forms![frm_temporalexportacion]![cve_personal] = cve_personal
Forms![frm_temporalexportacion]![NOMBRETOTAL] = NOMBRETOTAL
Forms![frm_temporalexportacion]![función] = función
If Forms![frm_temporalexportacion]!SELLIN.Form.RecordsetClone.RecordCount <> Forms![frm_temporalexportacion]![importa] Then
MsgBox "Se detecto una diferencia entre la carga que obtuvo el sistema y la cantidad de registros favor de revisar el archivo antes de continuar" & vbCrLf & "Causas probables: " & _
vbCrLf & "El archivo tiene datos con un formato incorrecto use macro para validarlo" & _
VbCrLf & "Hay registros duplicados ver tabla dinamica de archivo",, "Revision de Reportes"
Else
MsgBox NOMBRETOTAL & ". A continuación se ábrira una ventana para ver el resultado de la importación", , "Área Control de reportes"
End If
DoCmd.Hourglass False
End If
Exit Sub
msgboxerror:
Dato = Err
If Dato = 5 Then
MsgBox "Operacion cancelada", , "Revision de reportes"
ElseIf Dato = 3052 Then
MsgBox "El Archivo no se importo por las siguientes causas: " & vbCrLf & " 1 El Archivo no cumple con los requisitos que el sistema necesita " & vbCrLf & " 2 Se ha intentado cargar un segundo archivo despues de haber cargado otro, favor de intentar de nuevo ya que se ocupo cierto espacio de memoria al cargar el primer archivo", , "Revision de Reportes"
Else
MsgBox Err.Description
End If
DoCmd.Hourglass False
End Sub

Mi duda surgue ya que al momento de hacer clic en el botón me ejecuta todo bien hasta que pasa a una tabla temporal onde me arroja que la diferecncia del archivo origen no es igual a la carga ya revise mi archivo y la el total de registros es correcto pero al momento de la importacipn me dice que es menos

Que es lo que esta estoy haciendo mal

1 respuesta

Respuesta
2

Isaac: Parto de la base que tu cuentas, que te importa los datos.

Siendo así ese mensaje lo que creo te dirá es que determinados datos, o no se corresponden o su formato en destino es distinto al formato en origen.

Asegura cada uno de las columnas del Excel que tengan el Formato igual que la tabla receptora.

Campos Fecha, texto, etc. Es lo único que se me ocurre. Un saludo >> Jacinto

En mi archivo origen de excel tengo una macro que me convierte los registros al formato que establecí en la tabla temporal de access

Te comparto el código de la macro de access

Sub convertirv()
'
' convertirv Macro
'

'
Dim canrow As Integer
canrow = 0
uf = Sheets("sell in").Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To uf
If Sheets("sell in").Cells(i, 1) <> Empty Then
canrow = canrow + 1
End If
Next i
Columns("A:A").Select
Selection.NumberFormat = "#"
Columns("B:B").Select
Selection.NumberFormat = "@"
Columns("C:C").Select
Selection.NumberFormat = "#"
Columns("D:D").Select
Selection.NumberFormat = "mm/dd/yyyy"
Columns("E:E").Select
Selection.NumberFormat = "@"
Columns("F:F").Select
Selection.NumberFormat = "@"
Columns("G:G").Select
Selection.NumberFormat = "@"
Columns("H:H").Select
Selection.NumberFormat = "@"
Columns("I:I").Select
Selection.NumberFormat = "@"
Columns("J:J").Select
Selection.NumberFormat = "@"
Columns("K:K").Select
Selection.NumberFormat = "@"
Columns("L:L").Select
Selection.NumberFormat = "#"
Columns("M:M").Select
Selection.NumberFormat = "#"
Columns("N:N").Select
Selection.NumberFormat = "@"
Columns("O:O").Select
Selection.NumberFormat = "@"
Columns("P:P").Select
Selection.NumberFormat = "@"
Columns("Q:Q").Select
Selection.NumberFormat = "@"
Columns("R:R").Select
Selection.NumberFormat = "@"
Columns("S:S").Select
Selection.NumberFormat = "@"
Range("A1").Select
MsgBox ("Se han convertido " & canrow & " registros al formato correcto. Puedes continuar, antes de salir guarda los cambios."), vbInformation, "Sell In convertido"
End Sub

Isaac: Es un código más que me envías, que además supongo que está bien porque según yohe entendido des el Inicio, te ejecuta el proceso completo, te importa los datos adecuados, pero te manda un mensaje.

Desde fuera, es muy dificil saber de dónde viene ese mensaje, y por eso te comentaba que aseguraras los Formatos de Origen y Destino. Aunque a mi me parezca muy largo todo ese proceso que tienes, tu debes saber la causa. Dime por favor el mensaje exacto que te sale, y a ser posible una imagen, y en qué línea del código te da el error.

En una ocasión te brindé la oportunidad de que me enviaras tu BD, sin datos personales, pero ese camino está cortado porque tienes la versión de 64 bits y yo no. Un saludo >> Jacinto

Si recuerdo,

Te comento paso a paso que es lo que ejecuta la macro

1 en este primer paso le doy clic al primer botón para que abra el cuadro de dialogo y seleccione el archivo que quiero importar

2 al darle aceptar me manda los mensajes predeterminados de access con base al a consulta de eliminación de registros de mi tabla temporal

3 al darle aceptar a los mensajes de consulta de access abre el excel y hace la validación

4 después cierra el libro y abre el formulario temporal

Y es donde me dice que la carga es diferente del archivo origen

Del archivo origen tengo 683 registros y de los cuales solo hace la importación de 674

En total ya haciendo la validación de que el formato coincide debe verse reflejado en la tabla

Sinceramente Isaac, no se de donde pueda venir el fallo. Si de las 684 "Filas" con datos que tienes en el Excel te importa bien 674, en tu caso yo miraría "que de especial tienen las que Faltan" y eso te puede dar alguna pista. Este post tiene mucha literatura y dificilmente lo van a leer otros usuarios. Si no te sales genera otra pregunta acotando más el problema, después de hacer lo que te comento y ver si a alguien se le ocurre alguna solución que puede ser simple, pero no la veo.

Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas