** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Automatizacion con excel
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAutomatizacion con excel

 Responder Responder
Autor
Mensaje
01loko Ver desplegable
Colaborador
Colaborador


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 759
Enlace directo a este mensaje Tema: Automatizacion con excel
    Enviado: 20/Febrero/2021 a las 12:44
Saludos de nuevo

Tengo un problema con una automatización desde Access a Excel:

Creo un fichero, le doy el formato correcto, lo guardo y funciona perfecto, pero si vuelvo a hacerlo seguido me reporta un error:

Se ha producido el error '1004' en tiempo de ejecución:
Error en el método 'range' del objeto '_global'

entiendo que tiene que ver con que no se cierra bien o deja abierto algo (mas por intuición que otra cosa).

¿Alguien me puede echar una mano?

Gracias por anticipado

P.D.: el código es muy largo para plantarlo aquí, así que hice un ejemplo (Bajar)
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3391
Enlace directo a este mensaje Enviado: 21/Febrero/2021 a las 10:15
hola.
Prueba colocando delante de todos los "range", "activecell", "selection", "activewindows", "activesheet",  "activeworkbook",...... el xlapp. o sea xlapp.selection....
Por otra parte, al final del código pon el Set xlApp = Nothing, si no es así, "matas" la variable y a partir de ahí la cosa puede fallar. Quda mas o menos así:

xlApp.ActiveWorkbook.Close
xlApp.Quit
Set xlApp = Nothing

Al menos a mí con el office 19 me ha funcionado.
Espero que ayude a resolver la duda
Ya comentas
Un saludo a todos
Arriba
01loko Ver desplegable
Colaborador
Colaborador


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 759
Enlace directo a este mensaje Enviado: 21/Febrero/2021 a las 11:30
Muchas gracias: ¡POR FIN....FUNCIONA!

Ahora me gustaría la explicación:
Entiendo que, si no hago referencia al objeto "xlapp", alguna cosa se queda abierta al cerrar el objeto, por lo que la segunda vez casca. si no es así, por favor explica el motivo.

Mil gracias, llevaba un tiempo con ello.



P.D. Podéis cerrar el hilo
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: en línea
Puntos: 5735
Enlace directo a este mensaje Enviado: 21/Febrero/2021 a las 12:36
«Santa grabadora» ayuda y mucho, pero... incluye código innecesario (por si acaso) ...
.TintAndShade = 0
... la selección de celdas...
Range("B" & inicio_1 + 9 & ":G" & inicio_1 + 9).Select
Selection.Borders(xlDiagonalDown...
...  en la práctica no es necesario, ...  etc.
 

Por ejemplo; donde tienes...
 
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("B" & inicio_1 + 9 & ":G" & inicio_1 + 9).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
        .PatternTintAndShade = 0
    End With

... te bastaría depurarlo así...

  With Range("B" & inicio_1 + 9 & ":G" & inicio_1 + 9)
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlInsideVertical).LineStyle = xlContinuous
    .Interior.Pattern = xlSolid
    .Interior.ThemeColor = xlThemeColorDark1
    .Interior.TintAndShade = -0.249946592608417
  End With

... para obtener el mismo resultado.


►Yo trabajaría con una plantilla que integrase ya los formatos necesarios (incluso los textos fijos) y me evitaría construirlos cada vez.


Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 13722
Enlace directo a este mensaje Enviado: 21/Febrero/2021 a las 16:23
Coincido plenamente con Antonio: la grabadora va de miedo... en los 2 sentidos. Nos muestra el código que hace lo que hemos dicho... y lo que no hemos dicho. Así que hay que  separar el grano de la paja y quedarnos con la esencia. Aun así, no siempre muestra la forma más eficiente.
 
Que conste que no he descargado el ejemplo pero creo que, si lo que se desea es pintar todos los bordes, podría ser un pelín más cortito:

Range("B" & inicio_1 + 9 & ":G" & inicio_1 + 9).Borders.LinesStyle = xlContinuous

Y si, como parece, no se desean los bordes interiores horizontales, bastaría con ponerlos en xlNone

Range("B" & inicio_1 + 9 & ":G" & inicio_1 + 9).Borders(xlInsideHorizontal).LinesStyle = xlNone

En resumen, si la propiedad Borders de un objeto Range no indica específicamente uno de ellos, se asumen todos (excepto los diagonales). Eso lo vi tiempo atrás en otro foro y, curiosamente, la ayuda de Excel no lo menciona.

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable