Hola
He hecho una aplicación en access que se conecta a una hoja de excel la lee
y crea una tabla en access.
El problema esta en cuanto me encuentra una celda que contiene un error en
excel, en este caso
( #¡DIV/0! ) me deja de leer el fichero.
Se porque me produce el error, pero me gustaria saber (manteniendo el
error), si la aplicacion podria saltarse el error o cambiarlo por un caracter
y que siga con la lectura de la hoja de excel.
La dirección que sigue el cursor en la hoja de excel es de fila a fila.
Seria posible que lo hiciera columna a columna.
( adjunto el codigo en access)
Private Sub Actualizar_Click()
Dim xls As Object, _
strLibro As String, _
rst As DAO.Recordset, _
db As Database
DoCmd.Hourglass True
Set db = OpenDatabase("C:\Documents and
Settings\andres.montejo\Escritorio\BBDD\prueba\bdatos.mdb")
' ruta de la hoja de calculo
strLibro = "C:\Documents and
Settings\andres.montejo\Escritorio\BBDD\prueba\cuadro de mando.xls"
' abro Excel
Set xls = CreateObject("Excel.Application")
' abro el libro
xls.Workbooks.Open strLibro
' activo la hoja 1 o la que quieras
xls.Worksheets("Hoja1").Activate
xls.Visible = False ' o True si prefieres
' abro un recordset de la tabla 1 o la que quieras
Set rst = CurrentDb.OpenRecordset("Tabla1")
reg = rst.RecordCount
'MsgBox (reg)
If reg > 0 Then
db.Execute "delete * from [Tabla1]"
End If
' me situo en la celda A1 o en la que quieras
xls.activesheet.range("A1").SELECT
' leo celdas hasta que encuentre una vacía
Do While Not IsEmpty(xls.ActiveCell)
rst.AddNew ' añado un registro vacio
rst!Nº = xls.ActiveCell ' meto en el campo1 la celda
activa
rst!Código_BSC = xls.ActiveCell.Offset(0, 1) ' meto en campo2 la
celda de una columna a la derecha de la activa
rst!Area_BSC = xls.ActiveCell.Offset(0, 2)
rst!Nombre = xls.ActiveCell.Offset(0, 3)
rst!Descripción = xls.ActiveCell.Offset(0, 4)
rst!Datos_Necesarios = xls.ActiveCell.Offset(0, 5)
rst!Fuente = xls.ActiveCell.Offset(0, 6)
rst!Nivel = xls.ActiveCell.Offset(0, 7)
rst!Ejercicio = xls.ActiveCell.Offset(0, 8)
rst!Enero = xls.ActiveCell.Offset(0, 9)
rst!Febrero = xls.ActiveCell.Offset(0, 10)
rst!Marzo = xls.ActiveCell.Offset(0, 11)
rst!Abril = xls.ActiveCell.Offset(0, 12)
rst!Mayo = xls.ActiveCell.Offset(0, 13)
rst!Junio = xls.ActiveCell.Offset(0, 14)
rst!Julio = xls.ActiveCell.Offset(0, 15)
rst!Agosto = xls.ActiveCell.Offset(0, 16)
rst!Septiembre = xls.ActiveCell.Offset(0, 17)
rst!Octubre = xls.ActiveCell.Offset(0, 18)
rst!Noviembre = xls.ActiveCell.Offset(0, 19)
rst!Diciembre = xls.ActiveCell.Offset(0, 20)
rst!Acumulado = xls.ActiveCell.Offset(0, 21)
rst!Media = xls.ActiveCell.Offset(0, 22)
rst!Hito = xls.ActiveCell.Offset(0, 23)
rst.Update ' guardo el registro
xls.ActiveCell.Offset(1, 0).SELECT
Loop
' al acabar cierro el recordset
If Not rst Is Nothing Then
rst.Close
Set rst = Nothing
End If
' cierro Excel
xls.ActiveWorkbook.Close
Set xls = Nothing
db.Close
Set db = Nothing
DoCmd.Hourglass False
End Sub
Muchas gracias por su tiempo
Leer las respuestas