Trabajando con Excel desde VBA en Access

5 envíos / 0 nuevos
Último envío
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Trabajando con Excel desde VBA en Access

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

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 13 horas 47 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
no puedes seleccionar un rango si el libro está oculto.

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.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: Trabajando con Excel desde VBA en Access

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

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 13 horas 47 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Trabajando con Excel desde VBA en Access

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.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: Trabajando con Excel desde VBA en Access

Bueno, tenía problemas creando una tabla. Eso quedó resuelto así:

 

  With XLSheet

  .ListObjects.Add(xlSrcRange, .Range("$A$" & fila & ":$L$" & filafin), , xlYes).Name = "Tabla1"
  End With
 
Siendo fila y filafin las filas inicial y final calculadas.
 
También tenía problemas extendiendo una fórmula a toda la columna de la tabla. El proceso normal es introducir la fórmula en la primera fila, y luego seleccionar la siguiente celda. Eso hace como cuando pulsas enter al meter los datos directamente. Sin embargo, no me dejaba hacer la selección, por lo que la fórmula únicamente se quedaba en la primera fila de la tabla.
 
Lo he resuelto con esta línea dentro del bloque With
 
  .Range("Tabla1[Código concatenado]").Formula = "=[Código de provincia]&[Código de municipio]&[Código de entidad colectiva]&[Código de entidad singular]&[Código de núcleo]"
 
 
Benditas referencias estructuradas...
 
 
Saludos