Access - Error en código VBA para actualizar tabla

   
Vista:

Error en código VBA para actualizar tabla

Publicado por Miguel (29 intervenciones) el 02/10/2014 09:58:34
Hola, he creado este código para actualizar una tabla de Access mediante un fichero Excel, pero no funciona... La negrita creo que es donde puede estar el error, si alguien le puede echar un vistazo me iría de maravilla!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Private Sub cmdActualizarPHS_Click()
'Arreglar de la tabla todos modelos los que no tenian la información
On Error GoTo Err_ArreglarDatos
    Dim sql As String
    Dim model As String
    Dim stDocName As String
    Dim TBL As Recordset
    Dim TBL1 As Recordset
    Dim TBL2 As Recordset
    Dim sFuente As String, sSet As String, sDeno As String
    Dim sFaseProyecto As String, sSituacion As String, sFechaRevision As String, sZonaProcesos As String
    Dim sDesmontaje As String, sFuenteTBL1 As String
    Dim ObjExcel As Object
    Dim lFilaPHs As Long, lFilaPHSNuevo As Long, lFilaPHSContado As Long
    Dim kk As Integer
 
    'Debug.Print "PASO 1"
    'stDocName = "modelo"
    'Lanzar la macro con nombre modelo: (Introduce el modelo en la tabla modelo: 'INSERT INTO modelo (modelo) VALUES(Formularios![nuevo_modelo]![Modelo] ),)
    'DoCmd.RunMacro stDocName
 
    'Establecer db como la base de datos actual
    Set db = CurrentDb
    'Establecer TBL como la tabla de PHS_Desm
    sql = "SELECT * FROM PHS_Desm"
    Set TBL = db.OpenRecordset(sql)
 
    'Establecer TBL1 como la tabla todos los modelos
    sql = "SELECT * FROM Todosmodelos"
    Set TBL1 = db.OpenRecordset(sql)
    'Debug.Print "PASO 2"
 
    If Opcion0.Value = True Then
 
        'DefinirRuta
        'sRutaDefinitiva = "\\vfesseatmarp\PP\PP_2\PP_2FD\Compartida\03_Presentaciones\6.-Control proyecto\PHS\actualizaciones_PHS\wissenswerk" & txtRutaFichero.Value & ".xls"
        sRutaDefinitiva = "C:\Temp\" & txtRutaFichero.Value & ".xls"
        'Abrir excel
        Set ObjExcel = CreateObject("Excel.Application")
 
        ObjExcel.Workbooks.Open FileName:=sRutaDefinitiva
 
        lFilas = 1
        Do Until ObjExcel.Range("A" & lFilas).Value = ""
            lFilas = lFilas + 1
 
            If ObjExcel.Range("A" & lFilas).Value = "" Then
                Exit Sub
            End If
 
            sPHS = "PHS_" & ObjExcel.Range("A" & lFilas)
            If sPHS = "PHS_111" Then
                aa = aa
            End If
 
            sSituacion = ObjExcel.Range("B" & lFilas)
            sFechaRevision = ObjExcel.Range("C" & lFilas)
            sDenominacion = ObjExcel.Range("D" & lFilas)
            sDenominacion = Replace(sDenominacion, "'", "")
            sFaseProyecto = ObjExcel.Range("E" & lFilas)
            sZonaProcesos = ObjExcel.Range("F" & lFilas)
            sSet = ObjExcel.Range("G" & lFilas)
 
            TBL.MoveFirst
            sExiste = False
            lFilaPHSNuevo = 0
            Do Until TBL.EOF
                If sPHS = TBL1(Fuente) Then
                    'sql = "Update Todosmodelos SET (Situacion ='" & sSituacion & "', Fecha ='" & sFechaRevision & "', FP ='" & sFaseProyecto & "', ZP ='" & sZonaProcesos & '") WHERE Id_PHS_Desm =" & lFilaPHs & ";"
                    'db.Execute (sql)
                    DoCmd.RunSQL "Update Todosmodelos SET Situacion = " & sSituacion & ", Fecha ='" & sFechaRevision & "', FP ='" & sFaseProyecto & "', ZP ='" & sZonaProcesos & "'  WHERE Id_PHS_Desm =" & lFilaPHs & ";"
                End If
                TBL.MoveNext
                lFilaPHSNuevo = lFilaPHSNuevo + 1
            Loop
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error en código VBA para actualizar tabla

Publicado por Jose R (86 intervenciones) el 02/10/2014 23:16:04
Que tal miguel:

No se cual sea el motivo por el cual tienes todo este procedimiento para realizar esta tarea, pero te dejo esta sugerencia para importar los datos de excel a access es un proceso mas sencillo y sin tanto codigo

he utilizado por mucho tiempo este codigo y me funciona bien, lo utilizo en "On click" de un boton


DoCmd.SetWarnings False
Dim path1 As String, narch As String, master As String

'para definir con cual programa voy a abrir el archivo en este caso excel 2010

path1 = "C:\Program Files (x86)\Microsoft Office\Office14\excel.exe"

' para definir la ruta y nombre del archivo de excel que voy a abrir
narch = Ruta & "NombreArchivo.xls"

On Error GoTo Item
'abro la base de datos de access a donde necesito importar la informacion
DoCmd.OpenTable "NombreTabla", , acEdit
'selecciono todos los registros
DoCmd.RunCommand acCmdSelectAllRecords
'los elimino
DoCmd.RunCommand acCmdDeleteRecord
' esto es si la informacion que estas importando siempre en nueva, si unicamente la vas a estar acumulando en la base de datos no es necesario borrarla
Item:
' se cierra la base de datos
DoCmd.Close acTable, "NombreTabla"
'Abro el archivo
Call Shell(path1 & " " & narch, 2)
'y lo importo
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "NombreTabla", narch, True

MsgBox "Informacion importada a Base de datos"
DoCmd.SetWarnings True
DoCmd.Requery



por supuesto que puedes jugar con el codigo para lograr objetivos

espero te sirva mi aporte
saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en código VBA para actualizar tabla

Publicado por Miguel (29 intervenciones) el 02/10/2014 23:21:57
Hola Jose, se agradece mucho tu interés por ayudarme. Creo que no me he explicado bien lo que necesito hacer.
Tengo una tabla en Access la cual necesito actualizar desde un Excel. En este Excel hay unas columnas (menos que en la tabla de Access). Pues bien, lo que necesito hacer es buscar en el campo "Fuente" de la tabla Access y de los que coincidan en ese campo con el mismo en el Excel, actualizar las demás celdas en la tabla de Access.

No sé si me explico bien, no es simplemente importar los datos y meterlos, sino que hay que mirar para no repetir datos y sobreescribir en la tabla Access donde corresponda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar