Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188

    [VBA]QueryTables: percorso del database & caratteri jolly

    Salve.
    Nel passaggio di una macro che crea una nuova query ad un database

    ...
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Users\23Andrea\Desktop\2014.01.01_05.06Da tabase.txt", Destination:=Range("$A$2"))
    ...

    ho cercato di sostituire la parte del nome del database "2014.01.01_05.06" con caratteri jolly, per permettere il funzionamento anche se il database cambia nome, ma ricevo sempre un messaggio di errore per l'utilizzo dei caratteri jolly nel nome del file: non sono supportati? oppure è colpa della mia ignoranza della sintassi?

    C'è modo di automatizzare la creazione della query ad un database con percorso definito, ma con nome variabile?

    Grazie.
    Ultima modifica di 23Andrea; 01-01-2014 a 23:07

  2. #2
    Ciao,
    i caratteri jolly hanno senso se l'output dev'essere una lista di qualche tipo, non se si tratta di connettersi a un file, non puoi mica dire a excel "nella casella A2 metti i dati presi da un file della cartella X".

    Quale file? Il primo, l'ultimo, uno a caso?

    Excel quindi non accetta i caratteri jolly perché la richiesta che ne verrebbe fuori non avrebbe alcun senso.

    Quello che puoi fare è di trovare il modo di selezionare un singolo file fra quelli presenti nella cartella e comunicarne il nome a excel, per esempio il codice seguente legge tutti i file della cartella, preleva l'ultimo e lo passa alla querytables:

    codice:
       percorso = "C:\Users\23Andrea\Desktop\"
       
       Set fs = CreateObject("Scripting.FileSystemObject")
       Set cartella = fs.GetFolder(percorso)
       
       For Each file In cartella.Files
         nome = file.Name
       Next
    
       stringa = "TEXT;" & percorso & nome
    
       With ActiveSheet.QueryTables.Add(Connection:=stringa, _
           Destination:=Range("$A$2"))
           ...

    chiaramente se tu sei sicuro che nella cartella ci sarà sempre e solo un file allora questa soluzione ti va già bene ma se un domani in quella cartella saranno presenti più file dovrai perfezionare l'estrazione in modo da essere sicuro di individuare quello giusto.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Quote Originariamente inviata da NonCeLaFaccio+ Visualizza il messaggio
    ma se un domani in quella cartella saranno presenti più file dovrai perfezionare l'estrazione in modo da essere sicuro di individuare quello giusto.
    E' proprio questo il mio problema: trovare una soluzione intermedia tra quella che mi proponi (ma che è impraticabile, perchè nella directory in questione ci sono molti file) e quella che utilizzo attualmente, che mi costringe a selezionare ogni volta il database

    ...
    Sub K05_Connetti()
    DaTipUno = Application.GetOpenFilename("PincoPallino (*.txt),")
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & DaTipUno & "", Destination:= _
    Range("$A$2"))
    ...

    calcolando che:
    1) di volta in volta, cambia solo la parte del nome del file corrispondente alla stringa %data_ora% (2014.01.01_05.06 nel mio esempio), mentre la seconda parte del nome è sempre la stessa;
    2) in quella directory ci sarà sempre un solo file con il nome nel formato %data_ora%PincoPallino.txt.

    Grazie, comunque, per la risposta.

  4. #4
    Quote Originariamente inviata da 23Andrea Visualizza il messaggio
    E' proprio questo il mio problema: trovare una soluzione intermedia tra quella che mi proponi (ma che è impraticabile, perchè nella directory in questione ci sono molti file) e quella che utilizzo attualmente, che mi costringe a selezionare ogni volta il database

    ...
    Sub K05_Connetti()
    DaTipUno = Application.GetOpenFilename("PincoPallino (*.txt),")
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & DaTipUno & "", Destination:= _
    Range("$A$2"))
    ...

    calcolando che:
    1) di volta in volta, cambia solo la parte del nome del file corrispondente alla stringa %data_ora% (2014.01.01_05.06 nel mio esempio), mentre la seconda parte del nome è sempre la stessa;
    2) in quella directory ci sarà sempre un solo file con il nome nel formato %data_ora%PincoPallino.txt.

    Grazie, comunque, per la risposta.
    Così dovresti riuscirci:

    codice:
    Private Sub CommandButton1_Click()
       percorso = "C:\Users\23Andrea\Desktop\"
       
       Set fs = CreateObject("Scripting.FileSystemObject")
       Set cartella = fs.GetFolder(percorso)
       
       For Each file In cartella.Files
         If Right(file.Name, 12) = "Database.txt" Then
            nome = file.Name
            Exit For
         End If
       Next
       stringa = "TEXT;" & percorso & nome
       With ActiveSheet.QueryTables.Add(Connection:=stringa, _
           Destination:=Range("$A$2"))
           .Refresh
       End With
    
      
    End Sub

    praticamente fra tutti i file della cartella viene selezionato solo quello che termina con Database.txt.

    Fai sapere se funziona.


    Ciao



    EDIT: ho aggiunto Exit For per non fargli leggere inutilmente tutti i file della directory.
    Ultima modifica di NonCeLaFaccio+; 03-01-2014 a 15:47
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    188
    Eh...Però!
    Funziona alla grande!
    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.