Risultati da 1 a 11 di 11

Discussione: Query web excel 2016 - script da ottimizzare -



  1. #1
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Query web excel 2016 - script da ottimizzare -

    Ciao a tutti,
    volevo sottoporvi lo script che ho predisposto per scaricare i codici catastali dei comuni italiani.
    in pratica il file .XLSM e' diviso in tre Worksheets:
    1) DB: contiene i comuni da verificare (anche se non scritti in modo completo vanno bene)
    2) FOGLIO1: contiene la qry web
    2) RISULTATI: su qs. foglio vengono accodati i risultati.

    Funziona tutto fatto salvo che:
    1) non riesco a cancellare le Qry WEB che lo script genera
    2) ne consegue che per ogni record del DB viene creata una nuova Qry
    3) ulteriore conseguenza il PC va in TILT x eccessivo consumo di risorse (e' arrivato a richiedere 15MB di RAM x qs. processo!!!)

    pls mi date una mano ad ottimizzare qs. lavoro?

    grazie anticipatamente

    Robert

    P.S. Excel 2016, PC i5 64bit, HD SSD 1TB, RAM 16GB


    Codice: 
    
    Sub Macro_LOCALITA()
    
    
    
        On Error GoTo ERRORE
    
    
        ' RIGA CHE GENERA UN ERRORE
    
    
    ERRORE:
            ' GESTIONE DELL'ERRORE
            Resume Next
    
    
    
    
    '
    ' Macro5 Macro
    
    
    Dim MyPage As String
    Dim MyURL As String
    Dim EndPath As String
    Dim MyFile As String
    Dim riga As Variant
    'On Error Resume Next
       
    Dim rng As Range
    Set rng = LCell("db")
        
        
    COUNTER = 1
    
    
    
    
    For Each riga In rng.Rows
    
    
    COUNTER = COUNTER + 1
    
    
    MyPage = riga.Cells(1)
    
    
    If MyPage = "FINE_CICLO" Then
    GoTo Fine
    Else
    End If
    
    
    
    
    MyFile = "TABLE" & COUNTER
    
    
    MyURL = "http://www.nonsolocap.it/cap?k=" & MyPage & "&b=+Cerca+&c="
    
    
    '___________  NUOVA QUERY ___________________________
    
    
        ActiveWorkbook.Queries.Add Name:=MyFile, Formula:="let" & Chr(13) & "" & Chr(10) & "    Origine = Web.Page(Web.Contents(""http://www.nonsolocap.it/cap?k=" & MyPage & "&b=+Cerca+&c=""))," & Chr(13) & "" & Chr(10) & "    Data0 = Origine{0}[Data]," & Chr(13) & "" & Chr(10) & "    #""Modificato tipo"" = Table.TransformColumnTypes(Data0,{{""CAP"", type text}, {""LOCALITÀ (tuttitalia.it)"", type text}, {""PROV"", type text}, {""REGIONE"", type text}, {""PREF"", type text}, {""CODICE CATASTALE"", type text}, " & _
            "{""NOTE"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Modificato tipo"""
        
    '___________  CANCELLA VECCHI DATI __________________
    
    
        Sheets("Foglio1").Select
        Application.DisplayAlerts = False
        ActiveWindow.SelectedSheets.Delete
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Foglio1"
        
        Application.DisplayAlerts = True
        
    '___________  REFRESH NUOVI  DATI __________________
    
    
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & MyFile & "" _
            , Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = Array("SELECT * FROM [" & MyFile & "]")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = MyFile
            .Refresh BackgroundQuery:=False
        End With
        Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
     '___________  INSERISCE LA QRY EFFETTUATA IN TABELLA  _______________________
        
        Sheets("Foglio1").Select
        Range("H2").Select
        ActiveCell.FormulaR1C1 = MyPage
     
        ActiveWindow.WindowState = xlNormal
        Range("H2").Select
        
    'COPIA IL VALORE DELLA CELLA SUPERIORE IN TUTTE LE CELLE VUOTE
        Selection.CurrentRegion.Select
        Selection.SpecialCells(xlCellTypeBlanks).Select
        Selection.FormulaR1C1 = "=R[-1]C"
        
    'INCOLLA VALORI
        Selection.CurrentRegion.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
      
        
    '___________  ACCODA I DATI IN UN UNICO FOGLIO (RISULTATI)  __________________
    
    
        Sheets("RISULTATI").Select
        lastrow = Range("A" & Rows.Count).End(xlUp).Row + 1
        riga = Sheets("FOGLIO1").Range("A" & Rows.Count).End(xlUp).Row
        Sheets("FOGLIO1").Range("A3:H" & riga).Copy Destination:=Cells(lastrow, "A")
    
    
    
    
    Next
    Fine:
        
    End Sub
    File Allegati File Allegati

  2. #2
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    2326
    Versione Office
    2010/2013 PC
    Utile ricevuti
    400
    Utile dati
    41

    Re: Query web excel 2016 - script da ottimizzare -

    Citazione Originariamente Scritto da Robert Visualizza Messaggio
    Ciao a tutti,
    volevo sottoporvi lo script che ho predisposto per scaricare i codici catastali dei comuni italiani.
    in pratica il file .XLSM e' diviso in tre Worksheets:
    1) DB: contiene i comuni da verificare (anche se non scritti in modo completo vanno bene)
    2) FOGLIO1: contiene la qry web
    2) RISULTATI: su qs. foglio vengono accodati i risultati.

    Funziona tutto fatto salvo che:
    1) non riesco a cancellare le Qry WEB che lo script genera
    2) ne consegue che per ogni record del DB viene creata una nuova Qry
    3) ulteriore conseguenza il PC va in TILT x eccessivo consumo di risorse (e' arrivato a richiedere 15MB di RAM x qs. processo!!!)

    pls mi date una mano ad ottimizzare qs. lavoro?

    grazie anticipatamente

    Robert

    P.S. Excel 2016, PC i5 64bit, HD SSD 1TB, RAM 16GB


    Codice: 
    
    Sub Macro_LOCALITA()
    
    
    
        On Error GoTo ERRORE
    
    
        ' RIGA CHE GENERA UN ERRORE
    
    
    ERRORE:
            ' GESTIONE DELL'ERRORE
            Resume Next
    
    
    
    
    '
    ' Macro5 Macro
    
    
    Dim MyPage As String
    Dim MyURL As String
    Dim EndPath As String
    Dim MyFile As String
    Dim riga As Variant
    'On Error Resume Next
       
    Dim rng As Range
    Set rng = LCell("db")
        
        
    COUNTER = 1
    
    
    
    
    For Each riga In rng.Rows
    
    
    COUNTER = COUNTER + 1
    
    
    MyPage = riga.Cells(1)
    
    
    If MyPage = "FINE_CICLO" Then
    GoTo Fine
    Else
    End If
    
    
    
    
    MyFile = "TABLE" & COUNTER
    
    
    MyURL = "http://www.nonsolocap.it/cap?k=" & MyPage & "&b=+Cerca+&c="
    
    
    '___________  NUOVA QUERY ___________________________
    
    
        ActiveWorkbook.Queries.Add Name:=MyFile, Formula:="let" & Chr(13) & "" & Chr(10) & "    Origine = Web.Page(Web.Contents(""http://www.nonsolocap.it/cap?k=" & MyPage & "&b=+Cerca+&c=""))," & Chr(13) & "" & Chr(10) & "    Data0 = Origine{0}[Data]," & Chr(13) & "" & Chr(10) & "    #""Modificato tipo"" = Table.TransformColumnTypes(Data0,{{""CAP"", type text}, {""LOCALITÀ (tuttitalia.it)"", type text}, {""PROV"", type text}, {""REGIONE"", type text}, {""PREF"", type text}, {""CODICE CATASTALE"", type text}, " & _
            "{""NOTE"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Modificato tipo"""
        
    '___________  CANCELLA VECCHI DATI __________________
    
    
        Sheets("Foglio1").Select
        Application.DisplayAlerts = False
        ActiveWindow.SelectedSheets.Delete
        Sheets.Add After:=ActiveSheet
        ActiveSheet.Name = "Foglio1"
        
        Application.DisplayAlerts = True
        
    '___________  REFRESH NUOVI  DATI __________________
    
    
        With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
            "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & MyFile & "" _
            , Destination:=Range("$A$1")).QueryTable
            .CommandType = xlCmdSql
            .CommandText = Array("SELECT * FROM [" & MyFile & "]")
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .ListObject.DisplayName = MyFile
            .Refresh BackgroundQuery:=False
        End With
        Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
     '___________  INSERISCE LA QRY EFFETTUATA IN TABELLA  _______________________
        
        Sheets("Foglio1").Select
        Range("H2").Select
        ActiveCell.FormulaR1C1 = MyPage
     
        ActiveWindow.WindowState = xlNormal
        Range("H2").Select
        
    'COPIA IL VALORE DELLA CELLA SUPERIORE IN TUTTE LE CELLE VUOTE
        Selection.CurrentRegion.Select
        Selection.SpecialCells(xlCellTypeBlanks).Select
        Selection.FormulaR1C1 = "=R[-1]C"
        
    'INCOLLA VALORI
        Selection.CurrentRegion.Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
      
        
    '___________  ACCODA I DATI IN UN UNICO FOGLIO (RISULTATI)  __________________
    
    
        Sheets("RISULTATI").Select
        lastrow = Range("A" & Rows.Count).End(xlUp).Row + 1
        riga = Sheets("FOGLIO1").Range("A" & Rows.Count).End(xlUp).Row
        Sheets("FOGLIO1").Range("A3:H" & riga).Copy Destination:=Cells(lastrow, "A")
    
    
    
    
    Next
    Fine:
        
    End Sub
    Ciao Robert perchè non provi questo?

    https://www.dropbox.com/s/8j4efjryw1...solo.xlsm?dl=0

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  3. #3
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    2326
    Versione Office
    2010/2013 PC
    Utile ricevuti
    400
    Utile dati
    41

    Re: Query web excel 2016 - script da ottimizzare -

    Robert riprova perchè a me funziona e comunque è il mio dropbox

    https://www.dropbox.com/s/8j4efjryw1...solo.xlsm?dl=0

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  4. #4
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Re: Query web excel 2016 - script da ottimizzare -

    hai fatto un lavoro eccellente, questi dati non è facile trovali in un unico file!!!

    la mia necessità però è diversa, a fronte di dati di anagrafica non completi (a volte indicano località/frazioni al posto dei comuni...) vorrei interrogare un sito web che me li risolve senza interrogarne uno alla volta...

    Riuscite cortesmente a spiegarmi come, da codice VBA, posso eliminare la query web che genera il mio script, sono giorni che ci provo ma senza successo: già con questo aiuto potrei evitare il PC in blocco!!!
    meglio ancora se qualcuno riuscisse a darmi una mano ad ottimizzare l'intero script: ne ho provate diverse, ma non so se ho preso la strada giusta.

  5. #5
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Re: Query web excel 2016 - script da ottimizzare -

    ciao a tutti,
    riuscite a darmi una mano pls?
    Robert

  6. #6
    L'avatar di Powerwin
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Milano
    Messaggi
    648
    Versione Office
    2010
    Utile ricevuti
    125
    Utile dati
    44

    Re: Query web excel 2016 - script da ottimizzare -

    Ciao Robert, un saluto a tutti, scusate se m'intrometto... questo codice elimina qualsiasi query web della cartella

    Codice: 
    Sub DWQ()
        Dim i As Integer
        With ActiveSheet
            For i = .QueryTables.Count To 1 Step -1
                .QueryTables(i).Delete
            Next
        End With
    End Sub
    a te la modifica per adattarlo alla tua esigenza

    Ciao
    Flavio


  7. #7
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Re: Query web excel 2016 - script da ottimizzare -

    Citazione Originariamente Scritto da Powerwin Visualizza Messaggio
    Ciao Robert, un saluto a tutti, scusate se m'intrometto... questo codice elimina qualsiasi query web della cartella

    Codice: 
    Sub DWQ()
        Dim i As Integer
        With ActiveSheet
            For i = .QueryTables.Count To 1 Step -1
                .QueryTables(i).Delete
            Next
        End With
    End Sub
    a te la modifica per adattarlo alla tua esigenza

    Ciao
    Innanzitutto grazie per i consigli e scusate per il mio ritardo nella risposta (riuscivo a collegarmi al forum ma non accedevo al post: mi mandava sempre all'inserimento pw, ma questa e' un'altra storia...).

    Probabilmente mi sono spiegato male: le query che volevo eliminare con lo script che mi avete consigliato non si cancellano (non le trova).
    via allego print screen delle qry di cui parlo...

    avete qualche altro consiglio? sono quasi al traguardo ma mi manca il passo decisivo..

    grazie ancora a tutti per le indicazioni che mi darete.

    Robert

  8. #8
    L'avatar di Powerwin
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Milano
    Messaggi
    648
    Versione Office
    2010
    Utile ricevuti
    125
    Utile dati
    44

    Re: Query web excel 2016 - script da ottimizzare -

    Non c'e' allegato Robert
    Flavio


  9. #9
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Re: Query web excel 2016 - script da ottimizzare -

    Citazione Originariamente Scritto da Powerwin Visualizza Messaggio
    Non c'e' allegato Robert
    SORRY,
    eccolo!!!
    File Allegati File Allegati

  10. #10
    L'avatar di Powerwin
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Milano
    Messaggi
    648
    Versione Office
    2010
    Utile ricevuti
    125
    Utile dati
    44

    Re: Query web excel 2016 - script da ottimizzare -

    PowerQuery è un Add-in di Office 2016 quindi stiamo parlando di altro rispetto alla query web, prova a vedere qui se trovi soluzione

    https://support.office.com/it-it/art...a-fe0e60b82a94

    aggiungo questo:

    https://support.office.com/it-it/art...4-83adffa27249

    vai verso il terzo articolo
    Flavio


  11. #11
    L'avatar di Robert
    Clicca e Apri
    Data Registrazione
    Feb 2016
    Località
    PAVIA
    Messaggi
    11
    Versione Office
    office 2016
    Utile ricevuti
    0
    Utile dati
    0

    Re: Query web excel 2016 - script da ottimizzare -

    Citazione Originariamente Scritto da Powerwin Visualizza Messaggio
    PowerQuery è un Add-in di Office 2016 quindi stiamo parlando di altro rispetto alla query web, prova a vedere qui se trovi soluzione

    https://support.office.com/it-it/art...a-fe0e60b82a94

    aggiungo questo:

    https://support.office.com/it-it/art...4-83adffa27249

    vai verso il terzo articolo

    grazie Powerwin,

    avevo già letto questi articoli, non trovo pero' indicazioni VBA per eliminare le power query generate dal mio script.

    di solito, quando non ci arrivo, provo a registrare una macro (in qs. caso eliminando la manella la powerquery) ma in questo caso non mi registra lo script VBA: sembrerebbero quasi due ambienti completamente distinti.

    Proverò con un altro approccio: invece di eliminare la TABLE2 provo a modificare le connessioni mantenendo lo stesso nome tabella.

    vi aggiorno

    Robert

Discussioni Simili

  1. Ottimizzare apertura e chiusura di un file excel
    Di Cecco Beppe nel forum Domande su Excel VBA e MACRO
    Risposte: 2
    Ultimo Messaggio: 16/03/17, 11:16
  2. utilizzare foglio excel con query
    Di tigre2209 nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 09/01/17, 13:18
  3. Query excel
    Di cammellone nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 19/12/16, 21:49
  4. Excel 2016 e le power query.
    Di Davide1969 nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 19/08/16, 23:36
  5. Ottimizzare il file
    Di fudo7 nel forum Domande su Excel in generale
    Risposte: 4
    Ultimo Messaggio: 03/06/15, 08:55

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •