Imprimir página | Cerrar ventana

Automatizacion con excel

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85829
Fecha de impresión: 26/Marzo/2026 a las 16:08


Tema: Automatizacion con excel
Publicado por: 01loko
Asunto: Automatizacion con excel
Fecha de publicación: 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 ( https://drive.google.com/file/d/1o6xpSChVOFXrAw-o0EwP15qAIiMWmHDg/view?usp=sharing" rel="nofollow - Bajar )


-------------
Recordar de que soy nuevo y estoy aprendiendo.



Respuestas:
Publicado por: prga
Fecha de publicación: 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


Publicado por: 01loko
Fecha de publicación: 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.


Publicado por: AnSanVal
Fecha de publicación: 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.


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web



Imprimir página | Cerrar ventana