Imprimir página | Cerrar ventana

Borrar consulta datos externos

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=54766
Fecha de impresión: 22/Octubre/2019 a las 21:38


Tema: Borrar consulta datos externos
Publicado por: elicio
Asunto: Borrar consulta datos externos
Fecha de publicación: 18/Febrero/2009 a las 20:12
Hola a todos:

Trato de automatizar la recogida de datos externos en un libro con varias hojas que se ejecuta en el momento de abrir el libro. Para ello y con la ayuda de la grabadora de macros he hecho este código.

------------------------------------------------------------------------------------------
'Selecciono la hoja "ABC Compras" e inserto datos compras mensuales
    Sheets("ABC Compras").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & Directorio & "compra mensual proveedores.txt" _
        , Destination:=Range("B10"))
        .Name = "compra mensual proveedores_1"
      ...
      ...

    End With
    
'Desvinculo la selección del archivo de origen
    Range("B10").Select
    Selection.QueryTable.Delete

------------------------------------------------------------------------------------------

Con ello trato de que al abrir el libro no haya posibilidad de actualizar los datos importados.

La primera parte de obtención de datos funciona perfectamente pero el borrado de la consulta no funciona.

Veo mediante  

MsgBox Selection.QueryTable.Name

que el nombre que asigna a la consulta no es el que yo he definido
sino otro de igual nombre con un dígito más alto "compra mensual proveedores_42" (distinto cada vez), supongo que como consecuencia de las muchas pruebas realizadas. La grabadora de macros no refleja ningún código en esta operación.

Podrias hecharme una mano.

Gracias de antemano
 


-------------
elicio



Respuestas:
Publicado por: Jordi-Albert
Fecha de publicación: 18/Febrero/2009 a las 22:09
efectivamente en QueryTable se guardan todas las consultas...
 
tuve un problema parecido con el que el ordenador se quedaba saturado.
 
lo mejor en tu caso, creo, es borrar todas las queries
 
for each objQT in xxx.querytable
    objQT.delete
next
 
donde xxx puede ser "application" o "activeSheet"  (disculpa, esta escrito de memória y por ello no te lo puedo confirmar ahora... debería mirarlo mañana en la oficina)
 


Publicado por: elicio
Fecha de publicación: 19/Febrero/2009 a las 09:14

Hola:

Gracias Jordi-Albert.
Con
For Each objQT In ActiveSheet.QueryTables
    objQT.Delete
Next
me funciona.
He comprobado que con el código que yo tenía funciona, salvo que hubiera una consulta previa que no hubiera borrado y que el código que yo tenía tampoco borra pero si con tu código.
 
Por cierto no podría,para simplificar el código, hacer ese bucle para que borrara todas las consultas del libro en lugar de hoja a hoja. He intentado con ActiveWorkBook pero me da error 'no admite esa propiedad'.
 
Gracias y un saludo


-------------
elicio


Publicado por: Jordi-Albert
Fecha de publicación: 19/Febrero/2009 a las 12:48

por el Help veo que QueryTables es un objeto de WorkSheet, por lo que no puedes borrar directamente todas las queryTables de un solo paso..

lo que si que puedes hacer es añadir un bucle anterior
 
dim objWS   as WorkSheet
dim objQT    as QueryTable
 
For each objWS in Worksheets
   For Each objQT In objWS.QueryTables
       objQT.Delete
   Next
Next
 


Publicado por: elicio
Fecha de publicación: 19/Febrero/2009 a las 14:11

Hola:

Lo aplicaré.
 
De paso, he aprendido algo más, veo, efectivamente, que en el examinador de objetos aparece como propiedad e WorkSheet y no de  Workbook. Normalmento me pierdo en esa ventana
 
Muchas gracias Jordi-Albert, por mi parte se puede cerrar.
 
Un saludo


-------------
elicio



Imprimir página | Cerrar ventana