Hola
Tengo unos datos en Excel. Quiero importarlos a Access, pero no me vale hacer una importación de una tabla, sino que tengo que operar previamente con ellos, comprobar si el dato hay que introducirlo o no en la base de datos, y si es que sí, comprobar en la base de datos que no esté todavía, y meterlo en su sitio.
El problema es que operando desde Access se me producen problemas que no deberían existir si lo programara directamente desde Excel.
Ya incluí como referencia la librería de Excel a mi proyecto VBA, y hago lo siguiente:
Sub Abreexcel(rutaexcel As String)
Dim wkBkObj As Excel.Workbook
Dim XLSheet As Excel.Worksheet
Dim cont, fila, filafin As Integer
Dim fecha, rango As String
' Selecciona el archivo excel
Set wkBkObj = Workbooks.Open(rutaexcel)
'Localiza y selecciona la hoja donde está el Nomenclátor
For cont = 1 To wkBkObj.Sheets.Count
If Left(wkBkObj.Sheets(cont).Name, 5) = "Nomen" Then
Set XLSheet = wkBkObj.Worksheets(cont)
Exit For
End If
Next
cont = Null
'Define el año de referencia
fecha = Right(XLSheet.Name, 4)
'establece que Excel no sea visible
wkBkObj.Windows(1).Visible = False
With XLSheet
'Busca el inicio de la tabla
fila = 1
Do
If .Cells(fila, 1).Value <> "Nombre del municipio" Then
fila = fila + 1
Else
Exit Do
End If
Loop Until fila = 100
'Localiza el final de la tabla
.Cells(1, 15).Formula = "=CountA(H:H)"
filafin = .Cells(1, 15).Value + fila - 1
'Inserta una columna para el código concatenado
.Cells(1, 7).EntireColumn.Insert
.Cells(fila, 7).Value = "Código concatenado"
.Activate
.Cells(fila + 1, 7).FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
.Cells(fila + 2, 7).Select <-------------------------AQUÍ ME SALTA EL ERROR 1004
Selection.AutoFill Destination:=Range("G" & fila + 2 & ":G" & filafin)
End With
wkBkObj.SaveAs (rutaexcel & ".bak.xls")
End Sub
El problema es que cuando necesito seleccionar una celda, me salta el error. Esto típicamente ocurre cuando no está activada la hoja, pero en este caso me he encargado de activarla. También le hago referencia con la ruta completa, pues utilizo la variable XLSheet, que no me da error en ninguna otra línea que la utilizo.
He intentado también definir una tabla para no tener que utilizar el autofill, pero para hacerlo tengo que dar también un rango, y ahí es donde me salta el error.
Espero que me podáis ayudar.
Un saludo
Hola Cron:
Si el libro está oculto no te deja seleccionar ningún rango del libro.
prueba a comentar la línea
'wkBkObj.Windows(1).Visible = False
------
Ya sé Excel, pero necesito más.
Pues muchas gracias, no sabía que eso limitaba la selección.
Como no me interesa que el libro aparezca (en realidad quiero que el proceso sea totalmente transparente para el usuario), he conseguido hacer todo el trabajo sin hacer absolutamente ninguna selección para evitar el error.
Un saludo
Yo creo que es mucho mejor trabajar con objetos y sus propiedades, mejor que andar activando y seleccionando, sobre todo si trabajas con varios libros y hojas a la vez, porque al final te lías y ya no sabes lo que tienes activo ni en qué celda estás escribiendo.
------
Ya sé Excel, pero necesito más.
Bueno, tenía problemas creando una tabla. Eso quedó resuelto así:
With XLSheet